鑑於這種虛構的例子:爲什麼我不能將派生泛型類型轉換爲基類非泛型類型(通過約束)?
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」的作用與它應該像普通演員一樣。 –