9

给定以下示例代码:

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 ); };

?

在这个例子中,第二个语句产生编译错误,而第一个没有。

4

1 回答 1

23

匿名方法的语法为delegate parameter-list { statement-list }。参数列表是可选的。

如果省略参数列表,则匿名方法与参数未标记为“out”的任何委托类型兼容。

如果您提供参数列表,那么它必须与委托参数类型完全匹配。

在第一种情况下,您省略了它,在第二种情况下,您提供了它但与委托参数不匹配。所以delegate {}是合法的,delegate (int i, int j) { }是合法的,但delegate () {}不是。

无论如何,使用 lambda 表达式可能会更好。它是新代码中更常见的语法 (i, j)=>{ }

于 2012-04-19T04:18:01.350 回答