为什么这个委托语法“合法”?

时间:2011-07-20 07:16:04

标签: c# .net delegates anonymous-methods

我正在阅读匿名方法,并试图围绕这个例子:

List<int> evenNumbers = list.FindAll(delegate(int i)
{ return (i % 2) == 0; } )

为什么delegate(int i)合法?您无需声明new delegate void或类似内容。

这是匿名方法的意思吗?这是添加了允许匿名方法的语法糖吗?

3 个答案:

答案 0 :(得分:4)

这是合法的,因为你怀疑它,它正在创建一个匿名委托/方法。

替代方案(使用lambda operator =>)将是:

List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));

List<int> evenNumbers = list.FindAll(i => i % 2 == 0);

有关详细信息,请参阅Lambda Expressions

答案 1 :(得分:1)

如果你稍微分解一下这个语句,希望它会更明显 - 这是等效的代码。

Predicate<int> test = delegate(int i)
{
    return (i % 2) == 0;
};

List<int> evenNumbers = list.FindAll(test);

正如您所看到的,它创建了一个匿名委托(编译器将在幕后变成一种方法)

我个人总是找到“内联”匿名委托语法来解决这个问题而不是增加清晰度,而一旦习惯了语法,使用lambda表达式构建的相同构造增加了清晰度

List<int> evenNumbers = list.FindAll(i => i % 2 == 0);

答案 2 :(得分:0)

在这段代码中,似乎是使用委托将方法传递给方法。