鉴于这种虚构的例子:为什么我不能将派生泛型类型转换为基类非泛型类型(通过约束)?
class NonGeneric
{
}
class Generic<T> : NonGeneric
where T : NonGeneric
{
T DoSomething()
{
return this; // **
}
}
我希望它编译:Generic<T>
从NonGeneric
和T
派生必须在一个派生类,所以它满足其约束。
我应该能够做到这一点:
NonGeneric obj = new Generic<NonGeneric>();
那么就应该有这个指令没有问题:
return this;
或者至少是这样的:
return (T)this;
不幸的是,不起作用,上面的示例不会编译错误:
Cannot convert type
NonGeneric<T>
to 'T
'
我做错了什么,我看不到它,或者它只是不被允许?为什么这个?
我将避免,如果可能的话,像一个解决方法的任何我描述in this post(反射,动态编译的方法等)。我也会避免dynamic
对象(设计决定,我不能改变)。
你是对的,即使我不明白原因,它也可以工作。我期望“(T)这个”工作(如果滥用,抛出“InvalidCastException”)。我真的无法想象,为什么“as”的作用与它应该像普通演员一样。 –