我目前有一个声明如下的页面:
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方法时,我应该注意哪些性能缺陷或缺陷?我更喜欢它,因为它当然更简洁,但我不想牺牲性能来使用它。感谢。
答案 0 :(得分:90)
由于编译器会将lambda表达式转换为等效的委托,因此没有性能影响。 Lambda表达式只不过是一种语言特性,编译器将其转换为您习惯使用的完全相同的代码。
编译器会将您拥有的代码转换为以下内容:
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
});
}
}
答案 1 :(得分:54)
性能方面与命名方法相同。当你执行以下操作时,最大的问题是:
MyButton.Click -= (o, i) =>
{
//snip
}
它可能会尝试删除不同的lambda,将原始的lambda留在那里。所以经验教训是,除非你也希望能够删除处理程序,否则它很好。
答案 2 :(得分:36)
EventHandler handler = (s, e) => MessageBox.Show("Woho");
button.Click += handler;
button.Click -= handler;
答案 3 :(得分:2)
我没有意识到或曾经遇到任何性能影响,据我所知,它仅仅是“语法糖”并且编译成与使用委托语法等相同的东西。