Blu*_*ird 2 c# recursion class list
我正在尝试创建一个包含其中"项目"列表的类.我已经成功完成了,但是我想在项目列表中创建一个项目列表.我也能够这样做但是我必须在项目中为类使用不同的名称.
我想使用相同的类名,因为这将用于生成一些类名称很重要的json.此外,我希望能够像文件夹结构一样递归.每个属性都是相同的.我希望我能够很好地解释这一点.我本质上是在尝试创建一个文件夹/文件结构,其中每个文件夹中可以有x个文件,也可以有x个文件夹等等.
例如:
DocLib
-项目
--Item.Items
--- Item.Items.Items
--Item.Items
- 项目2等......
这是现有的代码:
public class DocLib
{
public string Title { get; set; }
public string spriteCssClass { get { return "rootfolder"; } }
public List<item> items { get; set; }
public DocLib()
{
items = new List<item>();
}
public class item
{
public string Title { get; set; }
public string spriteCssClass { get; set; }
public List<document> documents { get; set; }
public item()
{
documents = new List<document>();
}
public class document
{
public string Title { get; set; }
public string spriteCssClass { get; set; }
}
}
}
Run Code Online (Sandbox Code Playgroud)
我相信可能有更好的方法来实现这一点.
只需让项目成为您"自己"类型的列表
public class DocLib{
public string Title { get; set; }
public string spriteCssClass { get { return "rootfolder"; } }
List<DocLib> _items;
public DocLib(){
_items = new List<DocLib>();
}
public List<DocLib> Items {
get{
return _items;
}
}
}
Run Code Online (Sandbox Code Playgroud)
编辑使用示例:
public static class DocLibExtensions {
public static void Traverse(this DocLib lib,Action<DocLib> process) {
foreach (var item in lib.Items) {
process(item);
item.Traverse(process);
}
}
}
class Program {
static void Main(string[] args) {
DocLib rootDoc = new DocLib {Title = "root"};
rootDoc.Items.Add( new DocLib{ Title = "c1" });
rootDoc.Items.Add(new DocLib { Title = "c2" });
DocLib child = new DocLib {Title = "c3"};
child.Items.Add(new DocLib {Title = "c3.1"});
rootDoc.Items.Add(child);
rootDoc.Traverse(i => Console.WriteLine(i.Title));
}
}
Run Code Online (Sandbox Code Playgroud)