Set*_*o N 9 c# delegates anonymous-methods
给出以下示例代码:
static void SomeMethod()
{
Action<int,int> myDelegate;
//...
myDelegate = delegate { Console.WriteLine( 0 ); };
myDelegate = delegate() { Console.WriteLine( 0 ); }; // compile error
}
Run Code Online (Sandbox Code Playgroud)
有什么区别
myDelegate = delegate { Console.WriteLine( 0 ); };
Run Code Online (Sandbox Code Playgroud)
和
myDelegate = delegate() { Console.WriteLine( 0 ); };
Run Code Online (Sandbox Code Playgroud)
?
在此示例中,第二个语句生成编译错误,而第一个语句则不生成编译错误.
Eri*_*ert 23
一个匿名方法的语法是delegate 参数列表 { 语句列表 }.参数列表是可选的.
如果省略参数列表,则匿名方法与参数未标记为"out"的任何委托类型兼容.
如果提供参数列表,则它必须与委托参数类型完全匹配.
在第一种情况下,您省略了它,在第二种情况下,您提供它但不匹配委托参数.这delegate {}是合法的,delegate (int i, int j) { }是合法的,但delegate () {}不是.
无论如何,你最好使用lambda表达式; 它是新代码中更常见的语法: (i, j)=>{ };