请看下面的简单代码
public class A{}
public class B: A{}
public class G<T> where T : A
{
public T GetT()
{
return new A();
}
}
此代码不正确 - 编译器错误“无法将 A 转换为返回类型 T”。 但是A其实就是T。如果我改变
return new A();
到
return new A() as T;
一切正常。这种行为的原因是什么? 提前致谢
UPD:最初的问题有错误。现已修复
最佳答案
想象一下如果你这样做会发生什么:
public class C : A{}
G<C> x = new G();
C c = x.GetT();
你真的不希望它返回一个 B
引用...
as
运算符可以工作,因为如果 T
不是 B
,它只会返回 null
或 A
...但这可能不是真正您的意思。
在不知道您要做什么的情况下,很难知道要建议的行动方案。
关于c# - 泛型的奇怪行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5990933/