我有两种具有多对多关系的抽象类型:

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相应地添加到ExperimentsSample集合中。

当我尝试将Experiment<T>的实例添加到List<Experiment<Sample>>的集合中时,就会出现问题。由于TSample的子类型,因此我假设不会有问题。实际发生的情况如下:

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; }
    }
}


由于这两种类型相互依赖,因此它们需要共享相同的泛型类型。

07-24 20:03