作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个具有多对多关系的抽象类型:
public abstract class Experiment<T> where T : Sample
{
private List<T> _Samples = new List<T>;
public IReadOnlyCollection<T> Samples {
get { return _Samples.AsReadOnly(); }
}
public void AddSample(T sample)
{
_Samples.Add(sample);
sample.Experiments.Add(this); // The problem lies here
}
}
public abstract class Sample
{
private List<Experiment<Sample>> _Experiments = new List<Experiment<Sample>>;
public ICollection<Experiment<Sample>> Experiments {
get { return _Experiments; }
}
}
如您所见,实验接受一个类型参数,该参数是 Sample
的子类.我想做的是:每当 Sample
的子类型的实例被添加到 Experiment
, Experiment
应该相应地添加到 Experiments
收藏Sample
.
当我尝试添加 Experiment<T>
的实例时出现问题到 List<Experiment<Sample>>
的集合.自 T
是 Sample
的子类型,我以为不会有问题。实际发生的情况如下:
Value of type 'Experiment<T>' cannot be converted to 'Experiment<Sample>`
我的问题是是否有办法解决这个问题,或者更好地模拟这些实体之间的关系。
最佳答案
所以我认为解决方法是这样的:
public abstract class Experiment<T> where T : Sample<T>
{
private List<T> _Samples;
public IReadOnlyCollection<T> Samples {
get { return _Samples.AsReadOnly(); }
}
public void AddSample(T sample)
{
_Samples.Add(sample);
sample.Experiments.Add(this); // The problem lies here
}
}
public abstract class Sample<T> where T : Sample<T>
{
private List<Experiment<T>> _Experiments;
public ICollection<Experiment<T>> Experiments {
get { return _Experiments; }
}
}
因为这两种类型相互依赖,所以它们需要共享相同的泛型。
关于c# - 为什么我不能将这个泛型类型的实例添加到集合中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17794157/
我是一名优秀的程序员,十分优秀!