给出以下示例代码:
static void SomeMethod()
{
Action<int,int> myDelegate;
//...
myDelegate = delegate { Console.WriteLine( 0 ); };
myDelegate = delegate() { Console.WriteLine( 0 ); }; // compile error
}
之间有什么区别
myDelegate = delegate { Console.WriteLine( 0 ); };
和
myDelegate = delegate() { Console.WriteLine( 0 ); };
在此示例中,第二个语句生成编译错误,而第一个语句则不生成。
答案 0 :(得分:23)
匿名方法的语法为delegate
parameter-list {
statement-list {{1} }。参数列表是可选的。
如果省略参数列表,则匿名方法与参数未标记为“out”的任何委托类型兼容。
如果提供参数列表,那么它必须与委托参数类型完全匹配。
在第一种情况下,您省略了它,在第二种情况下,您提供它但不匹配委托参数。因此}
是合法的,delegate {}
是合法的,但delegate (int i, int j) { }
不合法。
无论如何,你最好使用lambda表达式;它是新代码中更常见的语法:delegate () {}
;