我正在阅读匿名方法,并试图围绕这个例子:
List<int> evenNumbers = list.FindAll(delegate(int i)
{ return (i % 2) == 0; } )
为什么delegate(int i)
合法?您无需声明new delegate void
或类似内容。
这是匿名方法的意思吗?这是添加了允许匿名方法的语法糖吗?
答案 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)
在这段代码中,似乎是使用委托将方法传递给方法。