给出这个虚构的例子:
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;
不幸的是,它不起作用,并且上面的示例没有编译错误:
无法将类型
NonGeneric<T>
转换为'T
'我做错了什么,我看不到,或者只是不允许?为什么这个?
如果可能的话,我会避免任何变通方法,例如我描述的in this post(反射,动态编译方法等)。我也会避免使用
dynamic
对象(设计决定,我无法更改)。 最佳答案
你有尝试过吗?
T DoSomething()
{
return this as T;
}
this
与T
隐式地不同,因此需要如上例中那样显式地强制转换它。