如果返回则无法推断泛型类型
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>();
这只是它无法推断的缺失功能还是我在这里做错了什么?我没有看到推断 T
是 MyContent
类型的任何问题,即使没有明确说明,当然我没有编写编译器并且不知道所有细节。
I don't see any problems with inferring that T is of type MyClass even without explicitly saying so
好吧,问题是根本没有以这种方式指定语言。泛型类型推断是基于参数执行的。方法调用表达式是一种始终具有类型的表达式——解析正在使用的方法重载以及泛型类型参数是什么是建立该类型的一部分。结果的使用方式只是 not 重载解析或类型推断的一部分。
它是在从匿名函数、方法组和空文字执行转换时使用 - 这些表达式本身没有类型,但只能转换为合适的类型。
长话短说:您需要指定类型参数。
请注意,您不需要编写编译器来获取所有详细信息 - 这就是语言规范的用途。最近发布的规范是 C# 5.
我有一个非常简单的扩展方法(虽然是扩展,普通的也一样,但可能无关紧要):
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>();
这只是它无法推断的缺失功能还是我在这里做错了什么?我没有看到推断 T
是 MyContent
类型的任何问题,即使没有明确说明,当然我没有编写编译器并且不知道所有细节。
I don't see any problems with inferring that T is of type MyClass even without explicitly saying so
好吧,问题是根本没有以这种方式指定语言。泛型类型推断是基于参数执行的。方法调用表达式是一种始终具有类型的表达式——解析正在使用的方法重载以及泛型类型参数是什么是建立该类型的一部分。结果的使用方式只是 not 重载解析或类型推断的一部分。
它是在从匿名函数、方法组和空文字执行转换时使用 - 这些表达式本身没有类型,但只能转换为合适的类型。
长话短说:您需要指定类型参数。
请注意,您不需要编写编译器来获取所有详细信息 - 这就是语言规范的用途。最近发布的规范是 C# 5.