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

时间:2009-12-02 13:34:55

标签: 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);
    }
}

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

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

4 个答案:

答案 0 :(得分:5)

这称为泛型类型推断,仅适用于通用方法。您可以将任何类型的实例作为参数传递给New,并且编译器会推断您要返回与Tuple<int, string>等参数匹配的特定通用元组...

答案 1 :(得分:3)

这是“类型推断”。有关详细信息,请参阅优秀文章here

答案 2 :(得分:0)

它有什么神奇之处?您有两种类型,一种接受泛型类型参数,另一种不接受。它们具有相同的名称,但它们的类型不同。尝试重命名其中一个,看看它是否对你更有意义。

/克劳斯

答案 3 :(得分:0)

C#编译器自动推断类型并编译

Tuple.New(1, "2")

Tuple.New<int,string>(1, "2") 
相关问题