C#泛型方法返回类型已知时为何无法自动推断类型参数
结论
这是C#编译器的固有设计,属于类型推断的正常工作逻辑,C#的泛型方法类型推断本身不支持基于返回值的目标类型做推导。
设计逻辑
C#的泛型方法类型推断规则明确限定:仅能通过传入方法的实参信息推导类型参数,不会参考方法返回值的接收方类型。你用到的Create<T>()是无参方法,没有任何实参可以给编译器提供推导T的有效线索,哪怕你明确把返回值赋值给HttpClient类型的变量,编译器也不会使用该赋值目标的类型反推T的类型。
这种设计的核心目的是规避歧义:如果支持基于返回值的推导,在存在方法重载、多兼容隐式类型转换等场景下,会出现大量二义性判断问题,既会大幅提升编译器的实现复杂度,也会降低代码的可读性和可预测性。
解决方案
目前没有办法让编译器自动识别该场景的泛型参数,你必须显式指定类型参数,修改为如下写法即可正常编译:
HttpClient client = Create<HttpClient>();
内容的提问来源于stack exchange,提问作者Ilya Chernomordik
相关产品推荐
相关产品推荐

