C# 将列表初始化为列表

C# 将列表初始化为列表,c#,C#,我很难找到这个问题的正确单词,所以我会尝试用一些代码告诉你我的问题是什么 我有一个父类,如下所示: public class ParentClass { public Guid ParentId { get; } public int ParentProperty { get; set; } public List<ParentClass> ParentList { get; set; } public ParentClass() {

我很难找到这个问题的正确单词,所以我会尝试用一些代码告诉你我的问题是什么

我有一个父类,如下所示:

public class ParentClass {
    public Guid ParentId { get; }
    public int ParentProperty { get; set; }
    public List<ParentClass> ParentList { get; set; }

    public ParentClass() {
        this.ParentId = Guid.NewGuid();
    }
}
public class ChildClass : ParentClass {
    public string ChildProperty { get; set; }

    public ChildClass() : base() {
        this.ParentList = new List<ChildClass>();
    }
}
它相当简单:它有一个ID、几个属性和一个包含自身元素的列表

现在我正在创建一个子类,如下所示:

public class ParentClass {
    public Guid ParentId { get; }
    public int ParentProperty { get; set; }
    public List<ParentClass> ParentList { get; set; }

    public ParentClass() {
        this.ParentId = Guid.NewGuid();
    }
}
public class ChildClass : ParentClass {
    public string ChildProperty { get; set; }

    public ChildClass() : base() {
        this.ParentList = new List<ChildClass>();
    }
}
这一个有一个额外的属性和一个构造函数,其中包含了问题。我不能在列表的声明中加入列表。 我不能只在子类中声明列表,因为我在使用它时需要在父类中声明列表


解决此问题的最佳方法是什么?

您应该使用指向父类和子类的接口


具有特定类型参数的泛型类型是一种新类型:因此List和List是不同的类型。

您应该使用指向两个类ParentClass和ChildClass的接口


具有特定类型参数的泛型类型是一种新类型:因此List和List是不同的类型。

我认为实现所需功能的最简单方法是使用其基本类型:List启动列表


我认为实现您想要的最简单的方法是使用其基本类型启动列表:list


只有当类型列表是协变的in-T,也称为out-T时,这才有效。但是,它不是,也不能是

类型列表允许Add、Insert和其他操作,因此它在语义上不是协变的。 在目前的C语言中,类类型不能是协变的。这是不受支持的。只有接口和委托类型的泛型参数可以是协变的或逆变的。 我们得到的最接近的是IReadOnlyList,它是协变的,因此:

IReadOnlyList<ParentClass> parentList = new List<ChildClass>();

是允许的。但是,这对您的情况没有帮助。

只有当类型列表在T中是协变的,也称为out T时,这才有效。但是,它不是,也不能是

类型列表允许Add、Insert和其他操作,因此它在语义上不是协变的。 在目前的C语言中,类类型不能是协变的。这是不受支持的。只有接口和委托类型的泛型参数可以是协变的或逆变的。 我们得到的最接近的是IReadOnlyList,它是协变的,因此:

IReadOnlyList<ParentClass> parentList = new List<ChildClass>();

是允许的。但是,这对您的情况没有帮助。

您正在寻求一种方法,将父对象或母对象添加到子对象列表中。C语言不支持乱伦。如果你解释一下你为什么需要这样做,也许会有帮助。你就不能这样做吗?你可以任意添加子类对象我基本上在每个项目中都使用父类,在每个项目中,父类和我需要的之间通常只有很少的差异,因此,我想使用一个父类,并将子类与项目@SayseI feel very dumb now@slawekwinYou正在寻求一种将父对象或母对象添加到子对象列表中的方法。C语言不支持乱伦。如果你解释一下你为什么需要这样做,也许会有帮助。你就不能这样做吗?你可以任意添加子类对象我基本上在每个项目中都使用父类,在每个项目中,父类和我需要的之间通常只有很少的差异,因此,我想使用一个父类并将子类与项目@SayseI feel really dumb now@slawekwint匹配,这是一段我完全不知道它的功能的代码块。您可能想向我解释一下如何执行这个var o=new ChildClass;然后,您将获得具有启动的ParentId和构造的parentList的完全可操作的ChildObject,这是一段代码,我对它的功能一无所知。您可能想向我解释一下如何执行这个var o=new ChildClass;然后,您将获得具有启动的ParentId和构造的ParentList的完全可操作的ChildObject