将委托分配给带有N个参数的func,而不显式声明参数

时间:2018-02-15 16:44:02

标签: c# delegates func

给定一个带有N个参数的函数,为什么可以为它指定一个没有明确声明任何参数的委托?例如

Func<int, string, object, string, bool> test;
// (1) this makes sense to me
test= delegate (int a, string b, object c, string d) { return true; };

// (2) this also makes sense to me
test= (a,b,c,d)=>true; 

// (3) why does this work? 
test = delegate { return true; }; 

为什么(3)有效? (1),(2)和(3)之间有什么区别吗?我们可以从第三个变体的大括号内部访问参数吗?

1 个答案:

答案 0 :(得分:3)

  

为什么(3)有效?

来自C# programming guide on MSDN

  

匿名方法使您可以省略参数列表。这意味着可以将匿名方法转换为具有各种签名的委托

  

(1),(2)和(3)之间有什么区别吗?

delegate keyword vs. lambda notation

  

我们可以从第三个变体的大括号内部访问参数吗?

没有。如果您打算在匿名方法中使用这些参数,请不要省略参数列表。