C#构造函数泛型参数推断

时间:2011-03-25 09:51:06

标签: c# generics tuples type-inference

为什么C#推断方法的泛型参数而不是构造函数?

new Tuple<int, int>(5, 5)Tuple.Create(5, 5)

2 个答案:

答案 0 :(得分:9)

其他答案都错了。这没有技术上的原因。可以从构造函数调用推断出类型,因为它可以从“普通”方法调用中推断出来。

请参阅Eric Lippert(前C#编译器开发人员)的回答:Why can't the C# constructor infer type?

答案 1 :(得分:5)

请考虑以下事项:

public class Foo<T>
{
    public Foo(T value) { }
}

public class Foo
{
    public Foo(int value) { }
}

// suppose type parameter inference in constructor calls
var x = new Foo(5); // which one?

因为您可以声明两个具有相同名称的类型,一个泛型和一个非泛型,您需要在构造函数调用中明确地决定它们。强制类型参数是显式的是消除任何可能的歧义的一种方法。该语言可能有一些解决方案规则,但此功能的好处足以花费预算来实现它。