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表达式可以处理多个参数或者不提供任何参数。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值