2008-10-16 49 views

回答

27

The MSDN page on anonymous methods explains it

在C#2.0版本之前,声明委托的唯一 方法是使用 命名方法。 C#2.0引入了 匿名方法,并在C#3.0和 之后,lambda表达式取代了 匿名方法,作为首选方式 来编写内联代码。但是,有关 中的匿名方法的信息 此主题也适用于lambda 表达式。在 中有一个案例,其中匿名方法提供了 功能,该功能在lambda 表达式中找不到。匿名方法使您可以省略参数列表 ,并且 这意味着可以将具有 各种签名的匿名方法 转换为委托。对于lambda表达式,这不是 。有关 更多有关 lambda表达式的信息,请参阅Lambda 表达式(C#编程指南)。

And regarding lambda expressions

lambda表达式是一个可以包含表达式和语句,并且可以用于创建代表或表达式树类型的匿名函数。 所有的lambda表达式都使用lambda运算符=>,它被读作“去往”。 lambda运算符的左侧指定输入参数(如果有的话),右侧保存表达式或语句块。 lambda表达式x => x * x被读取为“x转到x次x”。该表达式可以如下分配给代表类型:

10

首先,方便性:lambda表达式更易于读写。

二,表达式:lambda表达式可被编译到委托,表达式树(Expression<T>一些代表类型T,如Func<int,bool>)。表达式树更令人兴奋,因为它是LINQ处理数据存储的关键。

Func<int,bool> isEven = i => i % 2 == 0; 
Expression<Func<int,bool>> isEven = i => i % 2 == 0; 

注意with语句机构lambda表达式只能被编译为代表,不Expression S:

Action a =() => { Console.WriteLine(obj.ToString()); }; 
21
  1. 匿名方法的基本功能是没有名字的,有创造封锁的能力。
  2. Lambda表达式是可转换为匿名方法和表达式树的构造,并遵循比匿名方法更复杂的类型推断规则。

或多或少细微的差别的范围由埃里克利珀(C#语言设计师)在他的博客中解释说:

22
  1. Lambda表达式可以转换为委托或表达式树(有一些限制);匿名方法只能被转换为代表
  2. Lambda表达式允许对参数类型推断:无括号
  3. Lambda表达式允许身体被截断为只是一个表达式(返回一个值),或单一语句(在其他情况下) 。
  4. Lambda表达式允许将参数列表缩短为仅当参数名称可以推断时以及只有一个参数时的参数列表。匿名方法允许参数列表在主体内未使用时完全省略并且不会导致歧义

最后一点是匿名方法相对于lambda表达式的唯一好处,我相信。这是非常有用的一个无操作订阅虽然创建一个类似字段的事件:

你应该有一个“真棒”徽章
public event EventHandler Click = delegate{}; 
+1

.. – nawfal 2013-12-20 14:09:14

相关问题