创建嵌套列表并返回自定义对象类型列表

时间:2018-04-19 17:40:22

标签: c# data-structures

我试图创建一个返回类似的嵌套列表。

    • C
  • d
    • 电子

我创建了一个基础类:

public class MyClass
    {       
        public string Name { get; set; }

        public MyClass(string name)
        {
            Name = name;
        }         
    }

我创建了我的方法来设置我的默认嵌套列表:

public List<MyClass> CreateList()
    {

        List<List<List<string>>> MyList = new List<List<List<string>>>
        { new List<List<string>> {new List<string> {"A"}, new 
          List<string> {"B", "C", "D", "E"}},
          new List<List<string>> {new List<string> {"F"}, new 
          List<string> {"G", "H"}},
        };

        var a = MyList.SelectMany(x => x).Distinct().ToList();
        var b = a.SelectMany(x => x).Distinct().ToList();
        List<MyClass> abc= b.Cast<MyClass>().ToList();                       

        return abc;
    }

我知道这个列表没有正确设置但是这个演员也不行。如何正确设置此列表并正确投射?我必须从我的方法返回一个列表,数组或IEnumerable。

1 个答案:

答案 0 :(得分:2)

如果您想为您的对象获取树状结构,您可以通过添加&#34; Children&#34;属于你的班级。我建议使用List<T>

public class MyClass    
{       
    public string Name { get; set; }

    public List<MyClass> Children { get; set; }

    public MyClass(string name)
    {
        Children = new List<MyClass>();
        Name = name;
    }       

    //Added a new constructor so we can pass an IEnumerable of children on creation
    public MyClass(string name, IEnumerable<MyClass> children)
    {
        Children = new List<MyClass>(children);
        Name = name;           
    }
}

然后制作你想要的嵌套列表:

var myList = new List<MyClass>()
{
    new MyClass("A", new []
        {
            new MyClass("B"),
            new MyClass("C"),
        }),
    new MyClass("D", new []
        {
            new MyClass("E")
        })
};

结果将是一个在集合中使用时可以具有层次结构的类。你的&#34;顶级&#34;将是MyClass的集合(列表,数组等)。然后该集合中的每个项目都有自己的子项,可以有自己的子项等等。

小提琴here