一尘不染

为什么在编译器应该推断类型的同时提供显式泛型参数类型?

c#

为什么在编译器应该推断类型的同时提供显式泛型参数类型?

public static T2 Cast<T1,T2>(this T1 arg) where T2 : class where T1 : class
{
    return arg as T2;
}

用法示例:

 objOfTypeT2 = objOfTypeT1.Cast<TypeT1,TypeT2>();

与我使用更智能的编译器所需的用法相比:

 objOfTypeT2 = objOfTypeT1.Cast<TypeT2>();

也许我应该更聪明:-)

注意, 我提供了返回类型 。我不想提供我在其上调用函数的对象,该方法是 Extension Method


阅读 148

收藏
2020-05-19

共1个答案

一尘不染

规范将泛型方法的类型参数推断限制为全部或全部。您不能有部分推断。

基本原理可能是简化类型推断规则(由于已经必须考虑重载规则,它们已经非常复杂了)。

2020-05-19