这个问题在这里已有答案:
4079
2018-03-25 09:51
起源
答案:
其他答案都错了。这没有技术上的原因。可以从构造函数调用推断出类型,因为它可以来自“普通”方法调用。
请参考Eric Lippert(前C#编译器开发人员)的回答: 为什么C#构造函数不能推断类型?
9
2018-03-25 10:23
对,你好,很好看。 - Gleno
答案:
其他答案都错了。这没有技术上的原因。可以从构造函数调用推断出类型,因为它可以来自“普通”方法调用。
请参考Eric Lippert(前C#编译器开发人员)的回答: 为什么C#构造函数不能推断类型?
9
2018-03-25 10:23
对,你好,很好看。 - Gleno
考虑以下:
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?
因为您可以声明两个具有相同名称的类型,一个泛型和一个非泛型,您需要在构造函数调用中明确地决定它们。强制类型参数是显式的是消除任何可能的歧义的一种方法。该语言可能有一些解决方案规则,但此功能的好处足以花费预算来实现它。
5
2018-03-25 09:55
好例子。但是,如果我们有两个方法重载怎么办:泛型而非泛型?我不认为这里有很大的不同 - SiberianGuy
如果它们是方法,则会被调用的相同 - 非泛型。 - Jon
乔恩是对的。从这个角度来看,构造函数调用只不过是任何其他方法调用,并且可以应用相同的推断规则。 - Florian Greinacher
虽然确实存在这种令人困惑的案例,但作为答案,这是不正确的 - 请参阅弗洛里安的答案。 (评论添加,因为这是目前最受欢迎的答案)。 - Eamon Nerbonne