乐趣区

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

.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

退出移动版