C#高级编程之Lambda表达式

    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。 使用 Lambda 表达式创建该委托最为方便。 例如,当你在 System.Linq.Queryable 类中调用相同的方法时(如在 LINQ to SQL 中一样),参数类型为System.Linq.Expressions.Expression,其中 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;};

更多信息查询官方文档。


文章标题:C#高级编程之Lambda表达式
网站网址:http://ybzwz.com/article/pciepp.html