温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C#高级编程之Lambda表达式

发布时间:2020-07-25 10:30:39 来源:网络 阅读:7396 作者:刺激乐天派 栏目:编程语言

    C#的Lambda表达式,如果你第一接触这个专业术语,听这个名字你完全不知道它是干嘛的。那问题就来了(放心不是去蓝翔学挖掘机)。

  1. 它到底是什么呢?

    说明这个问题需要借助代码,给予简单描述。代码如下:

    public delegate int deleArgu(int x);//委托
    //...
    //...    
    
    int y = 0;
    
    mydeleArgu=x=>{return x*x;};//这就是一个Lambda表达式。
    
    y=mydeleArgu(5);//结果y=25;

    由上面所看到的x=>{return x*x};这就是一个Lambda表达式,它其实就是一个匿名函数。那接下来的问题就出现了。

2.什么是匿名函数?

    我也是借用几行代码说明,代码如下:

public delegate int deleArgu(int x);//委托

mydeleArgu = delegate(int x){return x*x;};
Console.WriteLine(mydeleArgu(5));//输出为25;

    上面的代码中mydeleArgu = delegate(int x){return x*x;};这就是一个匿名函数。这个事在.Net FrameWork 2.0后加入的概念。在.Net FrameWork 1.0的委托是把指针指向一个函数,那么名字叫什么,阿猫阿狗都无所谓了,名字不再重要,所以在这个地方提供了匿名方法。


3.Lambda表达式是怎么来的?

    到了后来.Net Framework 3.5之后就更加的改进了,如下代码:

public delegate String deleTransfer(string s);

deleTransfer =s=>s.Substring(0,1).toUpper()+s.Substring(1).toLower();//首字母大写,其他小写
Console.WriteLine(deleTransfer("abdDEF"));//结果"Adbef"

上面的部分就是带一个参数的Lambda表达式。是不是感觉它就是一个匿名方法?没错!它就是这样的。

我们很快就看清Lambda表达式的发展脉络,它是委托和匿名方法过渡而来的,和匿名方法很相似。



总结:(来自官方文档)

    

    => 运算符具有与赋值运算符 (=) 相同的优先级并且是右结合运算(参见“运算符”文章的“结合性”部分)。

Lambda 在基于方法的 LINQ 查询中用作标准查询运算符方法(如 Where)的参数。

使用基于方法的语法在 Enumerable 类中调用 Where 方法时(如在 LINQ to Objects 和 LINQ to XML 中一样),参数是委托类型 System.Func<T, TResult>。 使用 Lambda 表达式创建该委托最为方便。 例如,当你在 System.Linq.Queryable 类中调用相同的方法时(如在 LINQ to SQL 中一样),参数类型为System.Linq.Expressions.Expression<Func>,其中 Func 是最多具有十六个输入参数的任何一个 Func 委托。 同样,Lambda 表达式只是一种非常简洁的构造该表达式目录树的方式。 尽管事实上通过 Lambda 创建的对象具有不同的类型,但 Lambda 使得 Where 调用看起来类似。

在上一个示例中,请注意委托签名具有一个 int 类型的隐式类型输入参数,并返回 int。 可以将 Lambda 表达式转换为该类型的委托,因为该表达式也具有一个输入参数 (x),以及一个编译器可隐式转换为 int 类型的返回值。(以下几节中将对类型推理进行详细讨论。)使用输入参数 5 调用委托时,它将返回结果 25。在 is 或 as 运算符的左侧不允许使用 Lambda。适用于匿名方法的所有限制也适用于 Lambda 表达式


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

(input parameters) => expression;

    语句 lambda 与表达式 lambda 表达式类似,只是语句括在大括号中:

(input parameters) => {statement;};

更多信息查询官方文档。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI