我有兩個抽象類型具有多對多的關係:爲什麼我不能將這個泛型類型的實例添加到集合中?
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
應相應地被添加到Sample
的Experiments
集合中。
當我嘗試將Experiment<T>
的實例添加到List<Experiment<Sample>>
的集合時,問題就出現了。由於T
是Sample
的子類型,因此我假定不存在問題。實際發生的是:
Value of type 'Experiment<T>' cannot be converted to 'Experiment<Sample>`
我的問題是,是否有解決這個問題的方法,或者更好的模型,這些實體之間的關係。
PS:我實際上使用VB,但似乎有一個更大的C#觀衆,所以我已經將我的代碼翻譯成C#。我相信這種語言不應該對解決問題的方法有所作爲,但如果我錯了,隨時糾正我。 –
你能分享有效的VB代碼嗎? –
@CédricBignon實際上並沒有「工作」的VB代碼,我在上面註釋過的一行(即'sample.Experiments.Add(Me)')得到了一個編譯器錯誤。我在那裏訓練語法嗎? –