是否有任何理由在 C# 中的 Action 上使用带有 void return 的函数?

Is there any reason to use a function with a void return over an Action in C#?

除了传统,我有什么理由要使用

void foo(int k) {
    // stuff
}

超过

Action<int> foo = new Action 
    ((k) => { 
        // stuff
    });

更一般地说,正常定义我的函数而不是将它们定义为委托有什么实际优势吗?

当然,有很多充分的理由。想到的前三个:

几乎所有 C# 程序员都会对您极其不常见的过度使用委托感到非常惊讶。

函数可以是virtual,可以用来实现接口

可以重新分配变量,甚至是委托类型的变量,这会导致非常意外的行为。

但还有更多。

Eric Lippert 在评论中提到函数可以重载,变量不能。

方法可以作为迭代器实现(使用 yield 关键字),匿名函数不能。

可以隐式调用一些特殊方法:new T { a, b, c } 查找名为 Add 的方法,而不是名为 Add.

的变量

预定义的委托类型不允许您使用 refout 参数。

预定义委托类型不允许您向 return 类型或参数添加属性。