首页 > 解决方案 > c# 枚举列表以从文件夹结构中映射 parentId

问题描述

我有一个包含此类的列表:

public class RazorTree
{
    public int id { get; set; }
    public string Name { get; set; }        
    public string Path { get; set; }
    public int? parentId { get; set; } = null;
}

例子:

id = 1
path = "C:\\Projects\\testapp\subdirectoy\\"
name = "root"
parentId = null

id = 45
path = "C:\\Projects\\testapp\subdirectoy\\test.razor"
name = "test"
parentId = null

id = 55
path = "C:\\Projects\\testapp\subdirectoy\\subdirectory2\\test.razor"
name = "test"
parentId = null

我需要的是条目id = 45应该具有parentId = 1并且id = 55应该具有parentId = 45取决于每个条目具有的路径。

我如何根据每个孩子的路径将孩子与其各自的父母联系起来?

在此处输入图像描述

标签: c#.netreflectiondirectory

解决方案


好的,以供将来参考。

这就是我想出的:

public TreeItem GetFileStructure()
{
    var razorPages = typeof(Qassembly).Assembly.GetTypes().Where(x => x.BaseType?.Name == "LayoutComponentBase" || x.BaseType?.Name == "ComponentBase").ToList();

    var root = new TreeItem { Description = "root" ,Path = "root", ParentId = 0, Level =  4};

    List<string> TreePaths = new();

    foreach (var page in razorPages)
        TreePaths.Add(basePath + page.FullName.Replace(".", "\\") + ".razor");

    foreach (var i in TreePaths)
        root.AddChild(i);

    return root;
}
        public class TreeItem
        {
            static List<TreeItem> FlatList = new List<TreeItem>();
            public TreeItem()
            {
                Id = FlatList.Any() ? FlatList.Max(m => m.Id) + 1 : 1;
                FlatList.Add(this);
                Children = new List<TreeItem>();
            }
            public string Description { get; set; }
            public string Path { get; set; }
            public int Id { get; set; }
            public int ParentId { get; set; }
            public int Level { get; set; }
            public List<TreeItem> Children { get; set; }

            public void AddChild(string Item)
            {
                var items = Item.Split('\\');
                string path = string.Empty;
                for (int i = 0; i <= Level; i++)
                    path += (path == string.Empty ? string.Empty : "\\") + items[i];

                if (path == Path)
                {
                    if ((Level + 1) == items.Count())
                        Children.Add(new TreeItem { Description = items[Level], Path = path, Level = Level + 1, ParentId = Id });
                    else
                    {
                        path += "\\" + items[Level + 1];
                        var child = Children.FirstOrDefault(a => a.Path == path);
                        if (child == null)
                        {
                            child = new TreeItem { Description = path, Path = path, Level = Level + 1, ParentId = Id };
                            Children.Add(child);
                        }
                        child.AddChild(Item);
                    }

                }
            }
        }

即使每个孩子还不知道 parentId,这也会从平面列表中映射一棵树。


推荐阅读