为什么这种涉及隐含泛型类型的静态工厂方法有效?

Che*_*eso 0 c# generics

考虑

public class Tuple<T1, T2>
{
    public Tuple(T1 v1, T2 v2)
    {
        V1 = v1;
        V2 = v2;
    }

    public T1 V1 { get; set; }
    public T2 V2 { get; set; }
}

public static class Tuple
{
    // MAGIC!!
    public static Tuple<T1, T2> New<T1, T2>(T1 v1, T2 v2)
    {
        return new Tuple<T1, T2>(v1, v2);
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么在上面的工作中标有"MAGIC"的部分?它允许语法 Tuple.New(1, "2")而不是new Tuple<int, string>(1, "2"),但......如何以及为什么?

为什么我不需要 Tuple.New<int,string>(1, "2")

Jas*_*yon 5

这称为泛型类型推断,仅适用于通用方法.你可以传递你想要的任何类型的实例作为参数,New编译器推断你的意思是返回匹配参数的特定通用元组,如Tuple<int, string>...