繁体   English   中英

如果返回通用类型,则无法推断

[英]Cannot infer generic type if it is returned

我有一个非常简单的扩展方法(尽管它是扩展名,与普通扩展名相同,这可能无关紧要):

public static T Content<T>(this HttpResponseMessage response)
{
    var content = (ObjectContent<T>) response.Content;
    return (T) content.Value;
}

现在,我确实像这样使用它:

MyContent content = response.Content();

但是我收到了一个错误,即无法从用法中推断出类型,因此我必须这样做:

MyContent content = response.Content<MyContent>();

这仅仅是一个无法推断的缺失功能,还是我在这里做错了什么? 我没有看到推断TMyContent类型的任何问题,即使没有明确说明也是如此,尽管我当然没有编写编译器,也不知道所有细节。

我没有发现推断T是MyClass类型的任何问题,即使没有明确说明也是如此

好吧,问题在于根本没有指定这种语言。 泛型类型推断是基于参数执行的。 方法调用表达式是一种始终具有类型的表达式-解决使用哪种方法重载以及泛型类型参数是建立该类型的一部分。 结果的使用方式根本属于重载解析或类型推断的一部分。

执行从匿名函数,方法和组null文本转换,当它用于-这些都是不具有类型本身表达式,但仅仅是转换为适当的类型。

简而言之:您需要指定type参数。

请注意,您无需编写编译器即可获得所有详细信息-这就是语言规范的用途。 最新发布的规范是C#5

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM