使用lambdaexpression式处理事件

我目前有一个页面,声明如下:

public partial class MyPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //snip MyButton.Click += (o, i) => { //snip } } } 

我只是最近才从1.1版本移植到.NET 3.5,所以我习惯于在Page_Load之外编写事件处理程序。 我的问题是 是否有任何性能缺陷或缺陷,我应该留意当使用lambda方法呢? 我更喜欢它,因为它确实更简洁,但我不想牺牲性能来使用它。 谢谢。

没有性能影响,因为编译器会将您的lambdaexpression式转换为等同的委托。 Lambdaexpression式只不过是编译器转换成与您一起使用的完全相同的代码的语言function。

编译器会将你的代码转换成如下所示:

 public partial class MyPage : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { //snip MyButton.Click += new EventHandler(delegate (Object o, EventArgs a) { //snip }); } } 

性能方面与命名方法相同。 最大的问题是,当你做到以下几点:

 MyButton.Click -= (o, i) => { //snip } 

它可能会尝试删除不同的lambda,留下原来的那个。 所以教训是没关系,除非你也想删除处理程序。

 EventHandler handler = (s, e) => MessageBox.Show("Woho"); button.Click += handler; button.Click -= handler; 

没有我知道或曾遇到的性能影响,据我所知,它只是“语法糖”,并编译到使用委托语法等相同的事情。