【翻译】Lambda表达式学习
摘要
在这篇文章中,Brian讨论了Lambda表达式 在.NET应用程序中的Lambda的用法和应用。
提供了一个简短的介绍,在源代码和相关说明帮助下他测试了概念
介绍
Lambda表达式减少了重复数据的工作量。所有可列举数据是通过使用一个SQL-like
查询语法(一种看起来像SQL的查询,但不同于它)的LINQ来查询的。
LINQ 内置机制将循环枚举数据,并且使用一定的条件构成条件语句过滤数据。LINQ查询效率非常高。
Lambda表达式也是以类似的方式工作。一些现有的扩展方法内嵌Lamdba表达式来执行某些操作,
并且使重复操作变得更容易。我们将很快看到。Lambda表达式能够不需要扩展方法,但是这是现在通常的用法。
在.NET Framework 使用Lambda表达式可以定义各种各样扩展方法。在System.Core程序集,
System.Linq命名空间提供了两个静态类包含各种各样枚举和查询的定义源码。
例如在一些Where方法中定义了那些表达式。像这样的方法定义:
Listing 1
请注意第二个参数;Func (or function in VB.NET)定义了一个Lambda表达式。泛型参数是个key。
在Lambda表达式中第一个参数是IEnumerable接口类型,并且第二个参数是必须被方法返回的值。
我马上会开始一个例子,但意识到返回值的类型有许多例如一个string,double,业务实体,等。
那么我们使用Lambda表达式?在C#中Lambda表达式定义如下:
Listing 2
让我们继续这里。首先,"=>"代码标记一个Lambda表达式。"I" 参数是如上面的Func所声明的
类型<TSource> 别名或对象名。第一个参数是对象被循环,或者在容器中许多项的项类型。
例如,如果你有一个List<MyObject>,"I" 是一个MyObject类型的引用。因此,在我们的表达式上,
仅仅获取对象的FirstName是"Fred"的结果(必须是一个boolean)。
内容中向右的 "=>" 是定义方法返回true和false的条件检查。那么它如何使用?
我在我的应用中创建了另一个实例。他工作非常类似与一个代理,但是它介于代理和匿名方法之间,
因为实际定义是动态的。
Listing 3
{
List < ListItem > foundItems = new List<ListItem >();
foreach (ListItem item in control.Items)
{
if (result(item))
foundItems.Add(item);
}
return foundItems;
}
注意使用Lambda表达式标记需要声明Func<ListItem, bool>. ListItem 对象被比较对象,
并且方法返回一个bool值。在循环之后,列表容器中每个项被循环。
Lambda表达式获取一个ListItem对象的引用,并且返回 bool 表达式;如果结果返回为true,
列表添加,并集合进行回调。
结论
想你所看到的,使用Lambda表达式真的很简单,并且嵌入到你的应用程序中。
他真正的向你的应用程序中添加了大量的功能。Lambda表达式通常是通过静态方法公开,
但是他们在其他情况下也可以很好的使用。现在.NET Framework 中最常用的用法是扩展方法,但现在则不需要了。
原文地址
翻译的不是很好,请大家指出来。谢谢。