这个问题已经有一个答案在这里:

之间的区别是什么 匿名的方法 C#2.0和 lambda表达式 C#3.0.?

有帮助吗?

解决方案

MSDN页上的匿名的方式解释了它

在版本的C#前2.0,只 的方式来宣布一个代表使用 命名方法。C#2.0介绍 匿名的方法和在C#3.0 后来,lambda表取代 匿名的方式为优选方法 写联的代码。但是, 信息有关匿名的方法 这个主题也适用于lambda 表达方式。有一种情况下 其中一个匿名的方法提供 功能没有发现在lambda 表达方式。匿名方法的启用 你忽略的参数表, 这意味着,一个匿名的方法 可以转化为代表的有一个 各种各样的签名。这不是 可能与氧表达方式。对于 更多信息,具体地说关于 lambda表情,请参阅Lambda 表现形式(C#编程指南)。

和关于lambda表达式:

Lambda表达是一个匿名的功能,其中可以包含的表情和声明,并且可以被用来创建代表或表达树种类型。所有的氧式使用氧操作员=>,这是读作"进入"。左侧氧操作人员指定的输入参数(如果有)和右侧拥有的表达或声明块。Lambda表达x=>x*x读"x去x次x。" 这种表达式可以是分配给代理类型如下:

其他提示

  1. Lambda的表情可以转化为代表或表达树(有一些限制);匿名的方法只能转为代表
  2. Lambda表达的允许类型推理上的参数:
  3. Lambda表达允许身体被截断来只是一种表达(以返回值)或单一的声明(在其它情况下)没有括号。
  4. Lambda式允许参数清单缩短至仅仅参数名当类型可以推断当只有一个单一的参数
  5. 匿名的方法允许的参数列出可以完全省略时,它不是用于在身体和它不会导致模糊

最后一点是唯一的好处的匿名方法在lambda,我相信。它是用来创建一个领域似事件与一个没有-op订:

public event EventHandler Click = delegate{};
  1. 匿名的方法基本上是功能没有名字,有能力创造关闭。
  2. Lambda表达的构造,这是转换为两个匿名的方法和表达树,并按照更复杂的规则的类型推理于匿名的方法。

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

首先,便利:lambda更易于阅读和写。

第二,表达方式:lambda的可编 要么 一个代表, 一个表达树(Expression<T> 对于一些委托-T型,例如 Func<int,bool>).表达的树木更令人兴奋,因为它的关键是皇宫以外的过程的数据存储。

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

注意lambda表达的语句机构只能编制的代表,不 Expressions:

Action a = () => { Console.WriteLine(obj.ToString()); };
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top