lambda 表达式

英标:['læmdə],汉语音:蓝达

Lambda 是用来创建匿名函数

Lambda 表达式是一种可用于创建委托或表达式目录树类型的匿名函数。通过使用 lambda 表达式,可以写入可作为参数传递或作为函数调用值返回的本地函数。Lambda 表达式对于编写 LINQ 查询表达式特别有用。

一、委托中使用 Lambda 

        delegate int del(int i);
        static void Main(string[] args)
        {
            del myDelegate = x => x * x;
            int j = myDelegate(5); 
        }

Lambda 使用 => 运算符来表达。

左右是参数,右边是语句块

二、表达式目录树中使用 Lambda 

        static void Main(string[] args)
        {
            Expression<del> myET = x => x * x;
        }

表达式位于 => 运算符右侧的 lambda 表达式称为“表达式 lambda”。表达式 lambda 广泛用于表达式树(C# 和 Visual Basic)的构造。表达式 lambda 会返回表达式的结果,并采用以下基本形式:

(input parameters) => expression

多个参数的时候必须把左边用括号包起来,多个参数用“,”隔开:

(x, y) => x == y

你也可以显示的指定参数类型。

(int x, string s) => s.Length > x

如果没有左边不带入参数,那就使用一个空括号。

() => SomeMethod()

示例:

        delegate void how(string name, int age);

        static void Main(string[] args)
        {

            how i = (string n, int a) => { Console.WriteLine("小朋友年龄是:{0},名字是:{1}", a, n); };

            i(Console.ReadLine(), int.Parse(Console.ReadLine()));

            //  i("王小小", 1111);
        }

参数类型为 Expression<Func> 时,你也可以提供 Lambda 表达式,例如在 System.Linq.Queryable 内定义的标准查询运算符中。如果指定 Expression<Func> 参数,lambda 将编译为表达式目录树。

int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };
int oddNumbers = numbers.Count(n => n % 2 == 1);
customers.Where(c => c.City == "London");
var firstNumbersLessThan6 = numbers.TakeWhile(n => n < 6);

Lambda 的一般规则如下:

  • Lambda 包含的参数数量必须与委托类型包含的参数数量相同。

  • Lambda 中的每个输入参数必须都能够隐式转换为其对应的委托参数。

  • Lambda 的返回值(如果有)必须能够隐式转换为委托的返回类型。

 综合使用:

        delegate bool D();
        delegate bool D2(int i);

        D del;
        D2 del2;
        public void TestMethod(int input)
        {
            int j = 0;
            ///引用外部变量
            del = () => { j = 10; return j > input; };

            ///混合使用内部,和外部
            del2 = (x) => { return x == j; };

            Console.WriteLine("j = {0}", j); 
            bool boolResult = del();

            Console.WriteLine("j = {0}. b = {1}", j, boolResult);
        }

 

 

参考文档:

https://msdn.microsoft.com/zh-cn/library/bb397687.aspx

 

转载于:https://www.cnblogs.com/lystory/p/5115471.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值