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#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);