为什么这样的方法需要显式转换返回类型?
public T Test<T> ()
where T : Response
{
var ret = new Response ();
return ret; // Explicit cast needed here
}
约束明确指出T是Response或它的子节点,因此返回类型多态性应该允许这种情况而不进行强制转换,或者我认为是这样。
添加as T
允许编译通过。
答案 0 :(得分:4)
T
是Response
的子类,意味着每个T
都是Response
,但不是每个Response
都是T
。这就是你需要一个明确的演员。
答案 1 :(得分:2)
对于返回值,T
是否为Response
类型无关紧要。您需要返回T
类型的内容。
考虑类型DerivedFromResponse
。使用您的方法Test<DerivedFromResponse>
()将返回null
与演员阵容,如果没有它,将无法正常工作,因为您无法将Response
投射到DerivedFromResponse
中(反之亦然)可能的)。
希望它有所帮助。