【问题标题】:Assigning a delegate to a func that takes N parameters without explicitly declaring parameters将委托分配给接受 N 个参数而不显式声明参数的 func
【发布时间】: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# 编译器可以轻松生成正确的代码,它知道需要从委托签名生成什么具体方法。

标签: c# delegates func


【解决方案1】:

为什么 (3) 有效?

来自C# programming guide on MSDN

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


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

delegate keyword vs. lambda notation

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-22
    相关资源
    最近更新 更多