递归菜单生成器C#

递归菜单生成器C#,c#,.net,recursion,C#,.net,Recursion,我需要为课程列表站点构建一个面包圈/路径 e、 g课程有不同的菜单项,我需要显示如下 第01章/ 第01章/第01课/ 第01章/第01课/考试01/ 第01章/第01课/考试01/问题03/ 第01章/第01课/考试01/问题04/项目01 第1章/第2课/ 第二章 第02章/第01课 上面只是一个例子,说明了如何将项目安排在一个路径中 为了提出这一点,我有一个项目清单 Public Class Item { public string Level { ge

我需要为课程列表站点构建一个面包圈/路径

e、 g课程有不同的菜单项,我需要显示如下

  • 第01章/
  • 第01章/第01课/
  • 第01章/第01课/考试01/
  • 第01章/第01课/考试01/问题03/
  • 第01章/第01课/考试01/问题04/项目01
  • 第1章/第2课/
  • 第二章
  • 第02章/第01课
上面只是一个例子,说明了如何将项目安排在一个路径中

为了提出这一点,我有一个项目清单

Public Class Item
{
    public string Level
    {
        get;
        set;
    }

    public string Title
    {
        get;
        set;
    }
}
可以按如下方式创建列表

IList<Item> Items = new List<Item>();
Items.Add (new Item {Level = "0", Title = "Chapter01"});
Items.Add (new Item {Level = "1", Title = "Lesson01"});
Items.Add (new Item {Level = "2", Title = "Exam01"});
Items.Add (new Item {Level = "3", Title = "Question 03"});
Items.Add (new Item {Level = "3", Title = "Question 04"});
Items.Add (new Item {Level = "4", Title = "Item 01"});
Items.Add (new Item {Level = "1", Title = "Lesson02"});

Items.Add (new Item {Level = "0", Title = "Chapter02"});
Items.Add (new Item {Level = "1", Title = "Lesson01"});
IList Items=new List();
添加(新项目{Level=“0”,Title=“Chapter01”});
添加(新项目{Level=“1”,Title=“Lesson01”});
添加(新项目{Level=“2”,Title=“Exam01”});
添加(新项目{Level=“3”,Title=“问题03”});
添加(新项目{Level=“3”,Title=“问题04”});
添加(新项目{Level=“4”,Title=“项目01”});
添加(新项目{Level=“1”,Title=“Lesson02”});
添加(新项目{Level=“0”,Title=“Chapter02”});
添加(新项目{Level=“1”,Title=“Lesson01”});
父项的级别始终为0,子项的级别为1、2、3等


有没有人能教我用C#设计一个递归函数来实现这一点

我上一次这样做的方式是将菜单项实际组合成一个菜单项。例如:

public class MenuItem{
    public string Caption {get; set;}
    public int Level {get; set; }
    public List<MenuItem> MenuItems {get; set;}
    public MenuItem(string caption){
        Caption = caption;
        MenuItems = new List<MenuItem>();
    }
}
要填充层次结构,请使用以下内容:

public void BuildMenumStructure(){
    //Instantiate a File menu
    MenuItem root = new MenuItem("File");
    root.Level = 0;
    //Add some menu items
    root.MenuItems.Add(new MenuItem("New"){Level = 1});
    root.MenuItems.Add(new MenuItem("Edit"){Level = 1});
    //Build a save menu and add it in
    MenuItem saveMenu = new MenuItem("Save");
    saveMenu.MenuItems.Add(new MenuItem("Save As"){Level = 2});
    saveMenu.MenuItems.Add(new MenuItem("Save"){Level = 2});
    root.MenuItems.Add(saveMenu);
}

Item类应具有ID和父ID属性。因此,您确切地知道哪个项目位于哪个项目下。一旦你这样做了,发布一些你尝试过的代码。实际上这个对象没有id和父id属性。它只有level属性。级别0是级别1的父节点,是级别0的子节点,级别2是级别1的子节点等。在您的示例中,有2个级别0。那么第1课归入第1章还是第2章?现在你唯一的选择就是跟随邓肯的想法。谢谢你的帖子。层次结构正如我在示例中解释的那样。对不起,我不明白这个代码。你能再解释一下吗?这个类有效地代表了你菜单结构中的一个菜单选项。如果该菜单选项具有子选项,则它们将添加到父项菜单项属性中。如果您想向类添加一个level属性,这将非常容易。我将编辑我的代码并重新发布它。
public void BuildMenumStructure(){
    //Instantiate a File menu
    MenuItem root = new MenuItem("File");
    root.Level = 0;
    //Add some menu items
    root.MenuItems.Add(new MenuItem("New"){Level = 1});
    root.MenuItems.Add(new MenuItem("Edit"){Level = 1});
    //Build a save menu and add it in
    MenuItem saveMenu = new MenuItem("Save");
    saveMenu.MenuItems.Add(new MenuItem("Save As"){Level = 2});
    saveMenu.MenuItems.Add(new MenuItem("Save"){Level = 2});
    root.MenuItems.Add(saveMenu);
}