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; });
{
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项和匿名委托时一样的.