【问题标题】:When are delegates and Func/Action not interchangeable?什么时候代表和 Func/Action 不能互换?
【发布时间】:2014-09-23 12:31:12
【问题描述】:

在大多数情况下,委托和 Func/Action 是可以互换的,但在某些情况下它们不能互换吗?功能上有一些细微的差别吗?

(是的,有很多关于 SO 的“Action vs Delegates”,但没有一个回答能力问题以及它们何时不可互换。)

“它们不可互换的情况”是指您不能直接将 Func 替换为相应的委托(并委托为相应的 Func)的情况。

【问题讨论】:

  • 什么是确切你的意思是互换?请注意,Func/Action 代表,所以不清楚你在说什么......一个例子真的很有帮助。
  • @JonSkeet 我编辑了问题以使其更清楚。
  • 还不清楚——你说的“通讯代表”是什么意思? Func<TResult> 代表。 in code 的具体示例会更有帮助 - 目前这个问题听起来仍然像你错过了 Func<TResult> 是委托类型的事实
  • @JonSkeet 你说得对,我相信 Func/Action 类封装了代表,但它们实际上是代表。

标签: c# delegates action func


【解决方案1】:

Func 和 Action 根本不能互换

  1. FuncAction 都是代表

  2. Func<T,TResult> 应该总是返回一个值

  3. Action<T> 永远不应返回值

【讨论】:

    【解决方案2】:

    正如 Jon Skeet 在 cmets 中回答的那样,我错过了 Action/Func 实际上是代表的事实(我认为这是封装代表的类):

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

    所以委托和对应的 Func/Action 没有区别,因为 Func/Action 是委托。

    【讨论】:

      猜你喜欢
      • 2016-01-14
      • 1970-01-01
      • 2018-11-20
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2020-10-24
      • 2012-04-18
      • 2011-09-08
      相关资源
      最近更新 更多