在我的C#代码中,我有以下层次结构(为了清晰起见,我省略了不必要的关键字):
B : A
C : B
D : C
L<T> : K where T : C
M : L<D>
现在我收到一个投射错误:
L<C> c = new M -- error
这传递好了:
L<D> a = new M -- ok
C b = new D -- ok
为什么我在类型L<C>
上收到此错误?显然,M
L<D>
可以追溯到L<C>
以后D : C
..但为什么这是一个错误?此外,如果此错误是正确的,我该如何避免此类错误?
更新
还提出了runnable(我希望:))代码版本:
public abstract class A {}
public class B : A {}
public class C : B {}
public class D : C {}
public abstract class K {}
public class L<T> : K where T : C {}
public class M : L<D> {}
// -- ok:
L<D> a = new M(); // ok
C b = new D(); // ok
// -- error:
L<C> c = new M(); // error
更新2
我对重新开放的投票是基于标记为&#34;重复&#34;的线程。这个问题描述了一个与集合有点不同的情况,它可以清楚地表明如何在集合类型之间进行转换,因为集合元素可以很容易地转换。然而,在我的情况下,情况并非如此,该解决方案不会起作用。所以我投票支持某人1)给出一个合适的解决方案2)解释如何在这里应用引用线程的解决方案3)解释,为什么没有解决方案。