这对我来说似乎很奇怪,但我记得有个话题,埃里克·利珀特(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#中具有隐式转换。

10-07 19:53
查看更多