c# - 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
取决于每个条目具有的路径。
我如何根据每个孩子的路径将孩子与其各自的父母联系起来?
解决方案
好的,以供将来参考。
这就是我想出的:
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,这也会从平面列表中映射一棵树。
推荐阅读
- react-native - 我该如何解决这个问题?下面的控制按钮隐藏在日历界面(webview)中
- python-3.x - 特金特。在窗口中创建可调整大小的框架
- swift - Change Current Date To One Before / One After - Swift DatePicker
- ruby-on-rails - RVM:意外删除了除了 gem 之外的可执行文件,现在 gemset 已损坏
- excel - 谷歌电子表格公式
- vba - vba 中用于从 dir 编辑文件的无效过程调用或参数错误
- reactjs - 'event' 已弃用,我可以用什么代替?
- kubernetes - 角色绑定组到系统的 RBAC yaml 语法/结构:masters
- java - JavaFX TableView 访问聚合对象
- c# - 如何读取多部分/表单数据?