Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么这个委托语法是;“合法”吗;?_C#_.net_Delegates_Anonymous Methods - Fatal编程技术网

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)我把它们放在里面,这样你可以更容易地看到直接翻译。