【发布时间】:2018-02-15 16:44:02
【问题描述】:
给定一个接受 N 个参数的 func,为什么可以为其分配一个不显式声明任何参数的委托?例如
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) 之间有什么区别吗?我们可以从第三个变体的大括号内访问参数吗?
【问题讨论】:
-
匿名方法很灵活,可用于编写不需要传递参数的内联事件处理程序。不再使用太多,今天大多数程序员都选择 lambda 表达式。 C# 编译器可以轻松生成正确的代码,它知道需要从委托签名生成什么具体方法。