Lambda表达式

lambda表达式的写法符号是“=>”,简称为:goes to,如:x=>x+x、x=>{1+1},左边是参数,右边是一个方法体,只是省去了发括号,lambda表达式可以创建委托、表达式树的匿名函数,使用起来比匿名函数更加简洁。lambda表达式符号是一个右结合运算,与“=”有相同等级的优先级。

下面我们来试试

//定义一个委托
delegate bool D();
class Program
{
    //申明委托
    static D dev;

    static void Main(string[] args)
    {
        //使用lambda
        dev = ()=>{ return true; };
        dev = () => true;
        //不可以直接赋值
        //dev =true;

        Console.Write(dev());
        Console.Read();
    }
}

lambda表达式跟匿名函数一样可以使用外部参数

int i =2;
dev =()=>i>0;

 lambda表达式参数使用范围:

1、捕获的变量将不会被作为垃圾回收,直至引用变量的委托符合垃圾回收的条件。

2、在外部方法中看不到 lambda 表达式内引入的变量。

3、Lambda 表达式无法从封闭方法中直接捕获 ref 或 out 参数。

4、Lambda 表达式中的返回语句不会导致封闭方法返回。

5、如果跳转语句的目标在块外部,则 lambda 表达式不能包含位于 lambda 函数内部的 goto 语句、break 语句或 continue 语句。 同样,如果目标在块内部,则在 lambda 函数块外部使用跳转语句也是错误的。

使用lambda表达式查询

static void Main(string[] args)
{
    int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    var counts = numbers.Count(n => n % 2 == 1);
    var list = numbers.Where(t => t % 2 == 1);
    Console.WriteLine(counts);
    Console.Read();
}

许多标准查询运算符都具有输入参数,其类型是泛型委托系列 Func 中的一种。 这些委托使用类型参数来定义输入参数的数量和类型,以及委托的返回类型。我们鼠标放到count和where上面去就发现他们的参数是一个Func<int, bool>,其中int是输入参数,bool是返回类型。

lambda类型推理

在编写 lambda 时,通常不必为输入参数指定类型,因为编译器可以根据 lambda 主体、参数的委托类型以及 C# 语言规范中描述的其他因素来推断类型。

Lambda 的一般规则如下:

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

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

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

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值