这对我来说似乎很奇怪,但我记得有个话题,埃里克·利珀特(Eric Lippert)评论了C#无法(根据设计,至少是我的惯例)基于返回类型的方法重载方法,所以也许这与某种复杂的方式有关。
是否有任何原因不起作用:
public static T Test<T>() where T : new()
{
return new T();
}
// Elsewhere
SomeObject myObj = Test();
但这确实是:
var myObj = Test<SomeObject>();
从某种角度看,它们都很好,因为您不是在重复自己(以很小的方式),但这只是编译器的另一遍吗?
最佳答案
请查阅C#语言规范§7.5.2,声明变量的类型不是类型推断的证明,显然不是。考虑以下代码:
Base b = Test<Derived>();
Derived d = Test<Derived>();
方法的返回类型可能与变量的声明类型不同,因为我们在C#中具有隐式转换。