初探Lambda表达式

1.须知

首先让我们理解下如何定义一个匿名函数 例如事件

 this.Closed += delegate(object sender, EventArgs e) { MessageBox.Show("窗体已经关闭了"); };

首先关闭事件的事件是带有object sender, EventArgs e  两个参数的委托,我们也可以使用Lambda表达式进行编写.

 this.Closed+=(sender,e)=>{MessageBox.Show("窗体已经关闭了"); }; 这样写大家就很明白了.

 Sender,e 分别代表两个参数 =>{} 代表具体执行的地方.

2.使用

在实际应用当中我们会在linq当中使用它,因为泛型给我提供了很多有效的方法,请看以下代码

 

 

代码
 List<UserClass> Lists = new List<UserClass>
            {
                
new UserClass{ Age=15, Name="先生A"},
                
new UserClass{ Age=16, Name="先生B"},
                
new UserClass{ Age=17, Name="女士A"},
                
new UserClass{ Age=22, Name="女士B"},
                
new UserClass{ Age=24, Name="女士C"},
                
new UserClass{ Age=26, Name="女士D"},
                
new UserClass{ Age=27, Name="女士E"},
                
new UserClass{ Age=28, Name="女士F"}
            };

lst_Name.ItemsSource 
= Lists.Where(mode => { return mode.Age > 20; });

 

 如果我们用lists 打点,会出现很多<> 这样的方法,我们看到这个标志就应该知道了,就是泛型方法,那我们传入的参数就应该符合条件,那如果我们用匿名委托的写法也不是不可以,只不过相对繁琐,这样lambda表达式就很好啦。

例如:

public delegate TResult Func<TArg0, TResult>(TArg0 arg0) 一个委托泛型方法。

针对这个方法我们如何写呢: Func<int, bool> myFunc = x => x == 5;

调用:myFunc (6) 结果为false

3.规则

  • Lambda 包含的参数数量必须与委托类型包含的参数数量相同。

  • Lambda 中的每个输入参数必须都能够隐式转换为其对应的委托参数。

  • Lambda 的返回值(如果有)必须能够隐式转换为委托的返回类型。
    其实这3项和匿名委托时一样的.

  •  

     

     

    posted @ 2010-11-09 16:14  Bruce T  阅读(164)  评论(0)    收藏  举报