关于.net:如何使用-C-中的-Lambda-表达式

34次阅读

共计 1852 个字符,预计需要花费 5 分钟才能阅读完成。

.NET 3.5 中引入了 Lambda 表达式,它的呈现也让 Linq 真正的落地,Lambda 表达式 像一个匿名办法,但比匿名办法更具备灵活性,当应用 lambda 表达式时,你不须要指定输出参数的类型,也就看得出 Lambda 表达式 具备更短更洁净的个性。

分析 lambda 表达式

从实质上来说,Lambda 表达式 就是一个不须要当时定义的办法,没有办法名,也没有拜访修饰符,lambda 表达式 能够分成两局部来了解,即 右边 左边,前者示意办法的入参,后者示意办法体。

上面是 lambda 表达式 的语法结构。


(Input parameters) => Expression or statement block

lambda 表达式 反对两种语法结构,即:expression statement ,什么意思呢?

  • expression 就是 右边的 input + 左边的 表达式,如果比拟懵的话,看如下代码:

input => expression;
  • statement 就是 右边的 input + 左边的可反对多语句的 {} 组成,不明确的话,请看如下代码:

input => {statements};

Lambda 表达式的案例展现

手写 lambda 表达式真的是太简略了,你仅仅须要移除原来 匿名办法 模式下的 delegate入参类型, 先来看一下 匿名办法 怎么写。


delegate(Author a) {return a.IsActive && a.NoOfBooksAuthored > 10;}

接下来把下面的 匿名办法 转成 lambda 表达式,代码如下:


(a) => {a.IsActive && a.NoOfBooksAuthored > 10;}

下面的 a 就是办法参数,=> 是 lambda 操作符,前面的办法体就是具体逻辑。

再看 lambda 表达式 的另一个案例,它展现了如何将 1-9 中的奇数输入到控制台中。


List<int> integers = new List<int> {1, 2, 3, 4, 5, 6, 7, 8, 9};
foreach(int num in integers.Where(n => n % 2 == 1).ToList())
{Console.WriteLine(num);
}

无参的 lambda 表达式

lambda 表达式 能够无参也能够多参,上面的代码片段展现了一个无参的 lambda 表达式。


() => Console.WriteLine("This is a lambda expression without any parameter");

上面的代码片段展现了一个应用 多参 的 lambda 表达式。


(a, numberOfBooksAuthored) => a.NoOfBooksAuthored >= numberOfBooksAuthored;

也能够在 lambda 表达式中指定某一个参数的具体类型,代码如下:


(a, int numberOfBooksAuthored) => a.NoOfBooksAuthored >= numberOfBooksAuthored;

你甚至能够在 lambda 表达式中应用多条语句,记得用 {} 包起来即可,如下代码所示:


(a, 10) =>
{
   Console.WriteLine("This is an example of a lambda expression
                      with multiple statements");
   return a.NoOfBooksAuthored >= 10;
}

statement lambda 剖析

其实 statement lambdaexpression lambda 应用的语法格局都是一样的,惟一不一样的中央在于,前者的左边局部是用 {} 模式的,也就是反对多条语句的块模式,而后者只反对一条语句。

上面的代码片段展现了如何应用 statement lambda 将 1-9 中的奇数输入到管制台上。


int[] integers = new[] {1, 2, 3, 4, 5, 6, 7, 8, 9};
foreach (int i in integers.Where(x =>
{if (x % 2 == 0)
         return true;
    return false;
 }
 ))
Console.WriteLine(i);

Lambda 表达式 是一个平凡的个性,它将 匿名办法 简化到了极致,而且 lambda 表达式还反对任意多个入参,你甚至还能够将 lambda 表达式 赋给 Func,Action 或 Predicate 委托,在后续的文章中,咱们会探讨 lambda 更多的高级玩法,以及 Linq 和 异步 lambda。

译文链接:https://www.infoworld.com/art…

更多高质量干货:参见我的 GitHub: csharptranslate

正文完
 0