为什么C#推断方法的泛型参数而不是构造函数?
new Tuple<int, int>(5, 5)
与Tuple.Create(5, 5)
答案 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?
因为您可以声明两个具有相同名称的类型,一个泛型和一个非泛型,您需要在构造函数调用中明确地决定它们。强制类型参数是显式的是消除任何可能的歧义的一种方法。该语言可能有一些解决方案规则,但此功能的好处足以花费预算来实现它。