给出这个虚构的例子:

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;
}


thisT隐式地不同,因此需要如上例中那样显式地强制转换它。

10-01 14:21