C# 为什么这个委托语法是;“合法”吗;?
我正在阅读有关匿名方法的文章,并试图围绕这个示例来思考:C# 为什么这个委托语法是;“合法”吗;?,c#,.net,delegates,anonymous-methods,C#,.net,Delegates,Anonymous Methods,我正在阅读有关匿名方法的文章,并试图围绕这个示例来思考: List evenNumbers=List.FindAll(委托(int i) {return(i%2)==0;}) 为什么委托(inti)合法?您不必声明新委托无效或诸如此类的内容 这就是所谓的匿名方法吗?这是允许匿名方法的附加语法糖吗?这是合法的,因为您怀疑它正在创建匿名委托/方法 另一种选择(使用)是: List<int> evenNumbers = list.FindAll((i) => ((i % 2) ==
List evenNumbers=List.FindAll(委托(int i)
{return(i%2)==0;})
为什么委托(inti)
合法?您不必声明新委托无效
或诸如此类的内容
这就是所谓的匿名方法吗?这是允许匿名方法的附加语法糖吗?这是合法的,因为您怀疑它正在创建匿名委托/方法 另一种选择(使用)是:
List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));
List evenNumbers=List.FindAll((i)=>((i%2)==0));
或
List evenNumbers=List.FindAll(i=>i%2==0);
请参阅以获取进一步阅读。这是合法的,因为您怀疑它正在创建匿名委托/方法 另一种选择(使用)是:
List<int> evenNumbers = list.FindAll((i) => ((i % 2) == 0));
List evenNumbers=List.FindAll((i)=>((i%2)==0));
或
List evenNumbers=List.FindAll(i=>i%2==0);
请参阅以获取进一步的阅读。在这段代码中,它似乎将一个方法传递给使用委托的方法。在这段代码中,它似乎将一个方法传递给使用委托的方法。如果您稍微分解一下语句,希望它会更明显-这是等效的代码
Predicate<int> test = delegate(int i)
{
return (i % 2) == 0;
};
List<int> evenNumbers = list.FindAll(test);
谓词测试=委托(int i)
{
返回(i%2)==0;
};
列表编号=List.FindAll(测试);
正如您所看到的,它创建了一个匿名委托(编译器将在幕后变成一个方法)
就我个人而言,我总是发现“内联”匿名委托语法比增加清晰度更能掩盖问题,而使用lambda表达式构建的同一构造,一旦您习惯了语法,就会增加清晰度
List<int> evenNumbers = list.FindAll(i => i % 2 == 0);
List evenNumbers=List.FindAll(i=>i%2==0);
如果您稍微分解一下该语句,希望它会更明显-这是等效的代码
Predicate<int> test = delegate(int i)
{
return (i % 2) == 0;
};
List<int> evenNumbers = list.FindAll(test);
谓词测试=委托(int i)
{
返回(i%2)==0;
};
列表编号=List.FindAll(测试);
正如您所看到的,它创建了一个匿名委托(编译器将在幕后变成一个方法)
就我个人而言,我总是发现“内联”匿名委托语法比增加清晰度更能掩盖问题,而使用lambda表达式构建的同一构造,一旦您习惯了语法,就会增加清晰度
List<int> evenNumbers = list.FindAll(i => i % 2 == 0);
List evenNumbers=List.FindAll(i=>i%2==0);
既然您已经开始学习匿名方法,如果您还没有学习过,那么应该看看lambda表达式。我想你可能会觉得它们很有趣。@Poma:谢谢!我下一步就要开始了!:-)既然您已经开始学习匿名方法,如果您还没有学习过,那么您应该看看lambda表达式。我想你可能会觉得它们很有趣。@Poma:谢谢!我下一步就要开始了!:-)或者同样的事情,没有6个额外的括号。:-)+1您可以通过删除所有括号来清理它:var evenNumbers=list.FindAll(i=>i%2==0)代码>我把它们放在里面,这样你就可以更容易地看到直接翻译。或者同样的东西,没有6个额外的括号。:-)+1您可以通过删除所有括号来清理它:var evenNumbers=list.FindAll(i=>i%2==0)代码>我把它们放在里面,这样你可以更容易地看到直接翻译。