C# 当需要动态调整的多部门列表时,我会使用什么?

C# 当需要动态调整的多部门列表时,我会使用什么?,c#,list,dynamic,multidimensional-array,C#,List,Dynamic,Multidimensional Array,我有一个列表,我想作为一个动态扩展的树视图,但是如果我想在一个列表中有多个列表,我需要在初始列表的定义中声明它。我缺少什么来完成这一点,是否有更好的方法来实现我的目标 出于上下文考虑:我试图像树视图一样填充它,以便在我的应用程序中复制注册表。根据您的场景使用正确的类型 在您的例子中,这是一个类TreeNode,如下所示: public class TreeNode { private readonly List<TreeNode> _children = new List&l

我有一个列表,我想作为一个动态扩展的树视图,但是如果我想在一个列表中有多个列表,我需要在初始列表的定义中声明它。我缺少什么来完成这一点,是否有更好的方法来实现我的目标


出于上下文考虑:我试图像树视图一样填充它,以便在我的应用程序中复制注册表。

根据您的场景使用正确的类型

在您的例子中,这是一个类
TreeNode
,如下所示:

public class TreeNode
{
    private readonly List<TreeNode> _children = new List<TreeNode>();

    public TreeNode(string name, params TreeNode[] children)
    {
        Name = name;
        _children.AddRange(children);
    }

    public List<TreeNode> Children { get { return _children; } }
    public string Name { get; set; }
}
您可以这样创建它:

var root = new TreeNode("Root",
                        new TreeNode("Child1",
                                     new TreeNode("Child1a"),
                                     new TreeNode("Child1b")),
                        new TreeNode("Child2",
                                     new TreeNode("Child2a",
                                                  new TreeNode("Child2aA"),
                                                  new TreeNode("Child2aB")),
                                     new TreeNode("Child2b")));

所以我会像你发布的那样创建我自己的TreeNode类,并像使用常规可用的类一样使用它?我在这里遇到的问题,也许我只是没有正确地使用对象,但是我如何在一个预先存在的对象中添加一个接一个的子对象呢?示例:registryTreeTracker.Children.AddRange(rootSubs);其中rootSubs是一个字符串数组,或者只是一个普通的add来添加单个节点?好的,我对它进行了一些研究,并了解了如何使用它。非常感谢这是一个巨大的帮助!好吧,我以为我拿到了,但我想我还是有点泥泞。如何向对象中预先存在的子对象添加更多子对象?@JBeck:您可以通过不创建“内联”来保留对它的引用,如我在示例中所示。或者您可以使用
Children
属性获取子级:
root.Children.Single(“Child1”).childreng.AddRange(…)
这会将一些子项添加到
“Child1”
var root = new TreeNode("Root",
                        new TreeNode("Child1",
                                     new TreeNode("Child1a"),
                                     new TreeNode("Child1b")),
                        new TreeNode("Child2",
                                     new TreeNode("Child2a",
                                                  new TreeNode("Child2aA"),
                                                  new TreeNode("Child2aB")),
                                     new TreeNode("Child2b")));