C#Lambda表达式讨论

下面是三个例子分别是用委托和匿名方法和Lambda表达式,可以对比分析一下Lambda表达式的好处。

委托

static void Main(string[] args)
        {
            Console.WriteLine("*** Fun With Lambdas ***\n ");
            TraditionalDelegateSyntax();
            Console.ReadKey();
        }
        static void TraditionalDelegateSyntax()
        {
            //创建整数列表
            List<int> list = new List<int>();
            list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });

            //使用传统委托调用FindALL()
            Predicate<int> callback = new Predicate<int>(IsEvenNumber);
            //泛型委托:表示定义一组条件并确定指定对象是否符合这些条件的方法。此委托由 Array 和 List 类的几种方法使用,用于在集合中搜索元素。
            List<int> evenNumbers = list.FindAll(callback);
            Console.WriteLine("here are your even numbers:");
            foreach (int evenNumber in evenNumbers)
            {
                Console.WriteLine("{0}\t", evenNumber);
            }
            Console.WriteLine();
        }
        static bool IsEvenNumber(int i)
        {
            //这是一个偶数吗
            return (i % 2) == 0;
        }

匿名方法

   static void AnoymousMethodSyntax()
        {
           //建立整数表
            List<int> list = new List<int>();
            list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });

            //匿名方法
            List<int> evenNumbers = list.FindAll(delegate(int i)
                { return i % 2 == 0; });

            foreach (int evenNumber in evenNumbers)
            {
                Console.WriteLine("{0}\t", evenNumber);
            }
            Console.WriteLine();
        }

Lambda表达式

 static void LanmbdsExpressionSyntax()
        {
            //建立一个整数列表
            List<int> list = new List<int>();
            list.AddRange(new int[] { 20, 1, 4, 8, 9, 44 });
            //使用Lambda表达式
            List<int> evenNumbers = list.FindAll(i => (i % 2) == 0);
            foreach (int evenNumber in evenNumbers)
            {
                Console.WriteLine("{0}\t", evenNumber);
            }
            Console.WriteLine();
        }

通过以上示例代码,可以发现用一个简短的Lambda表达式 i => (i % 2) == 0 来取代委托  Predicate<T> 或者关键字 delegate。Lambda表达式可以应用于任何匿名方法或者强类型委托可以应用的场合,而且比匿名方法更节省编码时间。

C#允许使用一系列代码语句来定义Lamnda表达式。当表达式必须使用多行代码处理参数时,可以使用一对花括号确定这些语句的范围。Lambda表达式可以处理多个参数或者不提供任何参数。




阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37137902/article/details/80688163
文章标签: C#Lambda表达式
个人分类: .NET
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭