译-有用的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

posted @ 2013-01-24 21:41  haiziguo  阅读(278)  评论(0)    收藏  举报