带递归的C#类

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)

我相信可能有更好的方法来实现这一点.

lbo*_*zen 6

只需让项目成为您"自己"类型的列表

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)

  • 或者让item类包含List <item>属性 (2认同)