【发布时间】:2018-08-24 00:57:20
【问题描述】:
我有一个通用基类,其他通用类从该基类继承:
public class B<T> {
private List<T> parent;
public bool IsInParent() { return parent.Contains(this); }
public void Attach() { parent.Add(this); }
}
两个this 给出错误“无法从B<T> 转换为T。我知道这是因为this 可能是T(协方差)以外的东西,因此不会进入List<T>。我明白了。
如果我声明T 继承自B<T>,则第一个this 没有错误,但添加this 的错误仍然存在。
public class B<T> where T : B<T> { ..... ]
现在可以肯定,如果每个T 都继承自B<T>,那么每个B<T> 都是T,因此应该进入List<T>。
我做错了什么?
【问题讨论】:
-
"现在可以肯定,如果每个 T 都继承自
B<T>,那么每个B<T>都是 T,因此应该进入List<T>" 你已经完全倒退了。想象一下,如果我说“现在肯定如果每个 int 都继承自对象,那么每个对象都是一个 int,因此应该进入List<int>”,我希望很明显这是错误的。正确的说法是“每个T都可以进入List<B<T>>”。 -
感谢您的回复。这个比喻很有用。
标签: c# list generics add covariance