译-有用的Lambda表达式
Lambda表达式是.net里面的一个很有用的内置功能。我一使用了一段时间,但直到我开始研究它,我从来不知道这些其实可以多么有用。有很多快速、漂亮的做事方式,如果不使用lambda表达式,可能代码量是lambda的两倍。
所有的lambda表达式使用lambda运算符=>,这是解读为"gose to"。有时这些表达式看起来有点乱,但一旦你理解了他们的常用方法,他们是很容易读取。
让我们看一看如何用传统上的方法一个通用的列表中的项目:
List<Car> carColours = new List<Car>(); foreach (Car car in carColours) { if (car.Colour == "red") { return car.Colour; } }
看完上面的代码后,让我们再试试用性感的Lambda表达式。
List<Car> carColours = new List<Car>(); carColours.FirstOrDefault(car => car.Colour == "Red");
那么,让我们解释一下上面的代码。我使用Lambda表达式列表中的第一个颜色属性为红色的车。使用一行代码就可以解决原来使用四行的代码。我同时也发现这个很容易读的。
以下是关于表达式一些的其它方面的使用:
1、让符合要求的值转移动一个新的列表中
List<Car> matches = carColours.FindAll(val => val.Colour != "Red");
把所有不是红色的车找出来赋给matches。
2.另外一个从列表中获取值的例子
var weightLessThanSix = carColours.TakeWhile(n => n.Weight < 6);
上面的意思是从第一个开始数,只到重量小于六就停止了。假设有一个列表其重量分别是1,3,4,7,4,3,8,那么返回值为1,3,4
3.比如说我想提供一个清洁的方式来声明一个事件处理程序
下面是传统的方式:
public void CreateControls() { DropDownList1.SelectedIndexChanged += new EventHandler(DropDownList1_SelectedIndexChanged); } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { // Do something }
现在使用Lambda 表达式的方法
public void CreateControlsLambda() { DropDownList1.SelectedIndexChanged += (sender, e) => { Button1.Text = "Event Fired"; }; }
少了很多代码!
4.在一个列表中找到一个最小或者最大的
decimal maxWeight = cars.Max(car => car.Weight); decimal minWeight = cars.Min(car => car.Weight);
正如你所看到的,使用Lambda表达式可以让你的代码更加精致和可读行很强。
源自:http://www.deanhume.com/Home/BlogPost/useful-lambda-expressions/14
http://blogs.msdn.com/ericwhite/pages/Lambda-Expressions.aspx
http://msdn.microsoft.com/en-us/library/bb397687.aspx
http://www.informit.com/articles/article.aspx?p=1245158&seqNum=4
浙公网安备 33010602011771号