代码之家  ›  专栏  ›  技术社区  ›  Paul Suart Wes

Func<T,TResult>和Converter<TInput,TOutput>之间有什么区别?

  •  10
  • Paul Suart Wes  · 技术社区  · 17 年前

    查看Func和转换器代表的签名,

    public delegate TResult Func<T, TResult>(T arg);
    public delegate TOutput Converter<TInput, TOutput>(TInput input);
    

    我正在努力找出两者之间的区别。当然,如果我们重命名泛型类型参数,它们本质上是一样的?

    3 回复  |  直到 17 年前
        1
  •  17
  •   Philippe Leybaert    17 年前

    没有区别。它们存在的原因是历史的。 Converter<T1,T2> 已在.NET2.0中提供,但是 Func<> Func<T,TResult> 添加了,但它的作用与 转换器<T1、T2> .

        2
  •  8
  •   Marc Gravell    17 年前

    有很多委托类型是 有效地 相同-例如:

    • ThreadStart
    • MethodInvoker
    • Action

    都有相同的 void Foo() 签名历史上,名称是根据具体用途选择的;但是随着LINQ的出现,展望未来,关注签名似乎更为清晰——因此在.NET3.5中,他们引入了如下内容 Func<...> Action<...> ( 家庭 (代表团成员)

    不幸的是,它们在差异级别上并不真正兼容,因此如果您同时使用这两种方法,则通常需要在它们之间填充垫片。这是一种痛苦。。。

        3
  •  6
  •   AakashM    17 年前

    Converter<,> 是在.NET2.0中添加的。各种 Func 在3.5中添加了s(我想)。现在,当然是框架设计师了 能够 Func 是的,不是这个。为了避免一个破坏性的变化 Converter 必须留在原地。