委托和Func / Action何时不可互换?

时间:2014-09-23 12:31:13

标签: c# delegates action func

在大多数情况下,委托和Func / Action是可以互换的,但有些情况下它们是不可互换的吗?能力方面是否存在细微差别?

(是的,在SO上有很多“行动与代表”,但没有人回答能力问题以及它们何时不可互换。)

“它们不可互换的情况”我的意思是你不能简单地将Func替换为相应的委托(并委托给相应的Func)。

2 个答案:

答案 0 :(得分:1)

Func和Action根本不可互换

  1. FuncAction都是代表

  2. Func<T,TResult>应始终返回值

  3. Action<T>不应该返回值

答案 1 :(得分:1)

正如Jon Skeet在评论中回答的那样,我错过了Action / Func实际上是委托的事实(我认为它是封装委托的类):

namespace System
{
    public delegate TResult Func<in T, out TResult>(T arg);
}

因此代理和相应的Func / Action之间没有区别,因为Func / Action是委托。