C#树到数组中(将数组作为子级)

本文关键字:数组 | 更新日期: 2023-09-27 18:27:05

好吧,我几乎是c#的新手,我不知道多层数组是如何在c#中工作的。

我做了一个树视图,里面有菜单,比如:


  • 菜单_1
  • --儿童_1.1
  • --儿童_1.2
  • ----儿童_1.2.1
  • ----儿童_1.2.2
  • ----儿童_1.2.3
  • --儿童1.3
  • 菜单_2
  • --child_2.1
  • --child_2.2
  • ----child_2.2.1

每个MenuItem都应该有6个属性/属性/值,如下所示:

Item={ID:int,"NAME:String,POSITION:String、ACTIVE:Bool、ACTION:Bool、PATH:String}

所以:

Menu_1 = { 1, "File", "1", true, false, "" }
child_1.1 = { 2, "Open", "1.1", true, true, "./open.exe" }

等等

到目前为止:

我已经为eath菜单项手动设置了一些字符串数组(String[]),并在其中填充了信息。

String[] Item_1 = {"1", "File", "1", "1", "0", ""};
String[] Item_2 = ...
...

现在我想把所有这些字符串数组放在ArrayList[]Sort()中,使用每个项(Item_1[2])的"POSITION"值

我还希望代码动态地创建Item本身的Array,从sql表中读取值。这些数组不应该像我现在做的那样只是字符串数组,因为我希望ID保持为int&ACTIVE和ACTION值保持为布尔值。

最终产品应该是这样的:

MenuItems = ArrayList(
    item_1 = Array(Int, String, String, Bool, Bool, String)  // '
    item_2 = Array(Int, String, String, Bool, Bool, String)  //  '
    item_3 = Array(Int, String, String, Bool, Bool, String)  //  / all sortet by the 3rd value, the position )
    item_4 = Array(Int, String, String, Bool, Bool, String)  // /
    ...
    )
)

谢谢你们所有能帮我的人。

C#树到数组中(将数组作为子级)

假设您使用的是C#2.0或更高版本,我会使用泛型列表而不是ArrayList和类容器,而不仅仅是数组。假设您使用的是.NET 3.5或更高版本,我建议您也使用LINQ进行排序。

首先,为菜单项的类型制作一个类容器:

public class MenuItem
{
    public int ID {get;set;}
    public string Name {get;set;}
    public string Position {get;set;}
    public bool Active {get;set;}
    public bool Action {get;set;}
    public string Path {get;set;}
} 

然后,您可以将此类的实例存储在通用列表中:

var items = new List<MenuItem>();
items.Add(new MenuItem{ID="1", Name="File", Position="1", Active=true, Action=false, Path=""});

然后,要按位置对列表进行排序,可以使用LINQ:

var sorted = items.OrderBy(i => i.Position);

不能单独使用数组。如果你想成为灵活的,创建一个包含数组或列表子项的类

public class MenuItem
{
    public MenuItem()
    {
        SubItems = new List<MenuItem>();
    }
    public int ID { get; set; }
    public string Name { get; set; }
    public string Position { get; set; }
    public bool Active { get; set; }
    public bool Action { get; set; }
    public string Path { get; set; }
    public List<MenuItem> SubItems { get; private set; }
}

然后,您可以添加类似的子项

var child_1_1 = new MenuItem{ 2, "Open", "1.1", true, true, "./open.exe" };
Menu_1.SubItems.Add(child_1_1);