C# 列表<;字符串>;层次结构的路径选择

C# 列表<;字符串>;层次结构的路径选择,c#,C#,我有一个这样的路径列表: Root Root/Folder1 Root/Folder1/SubFolder1.1 Root/Folder1/SubFolder1.2 Root/Folder2 OtherRootFolder OtherRootFolder/Folder1 我需要创建一个带有文件夹+子项列表的层次结构 public class FolderTreeModel { public string Title { get; set; } public List&

我有一个这样的路径列表:

Root 
Root/Folder1 
Root/Folder1/SubFolder1.1 
Root/Folder1/SubFolder1.2
Root/Folder2 
OtherRootFolder 
OtherRootFolder/Folder1
我需要创建一个带有文件夹+子项列表的层次结构

public class FolderTreeModel
{
    public string Title { get; set; }
    public List<FolderTreeModel> Children { get; set; }
}

提前感谢。

以下是您需要的代码:

Action<FolderTreeModel, IEnumerable<string>> ensureExists = null;
ensureExists = (ftm, ts) =>
{
    if (ts.Any())
    {
        var title = ts.First();
        var child = ftm.Children.Where(x => x.Title == title).SingleOrDefault();
        if (child == null)
        {
            child = new FolderTreeModel()
            {
                Title = title,
                Children = new List<FolderTreeModel>(),
            };
            ftm.Children.Add(child);
        }
        ensureExists(child, ts.Skip(1));
    }
};
…然后代码变得更简单一些:

Action<FolderTreeModel, IEnumerable<string>> ensureExists = null;
ensureExists = (ftm, ts) =>
{
    if (ts.Any())
    {
        var title = ts.First();
        var child = ftm.Where(x => x.Title == title).SingleOrDefault();
        if (child == null)
        {
            child = new FolderTreeModel() { Title = title };
            ftm.Add(child);
        }
        ensureExists(child, ts.Skip(1));
    }
};

var root = new FolderTreeModel() { Title = "/" };
Action-ensureExists=null;
ensureExists=(ftm,ts)=>
{
if(ts.Any())
{
var title=ts.First();
var child=ftm.Where(x=>x.Title==Title.SingleOrDefault();
if(child==null)
{
child=newfoldertreemodel(){Title=Title};
ftm.Add(儿童);
}
确保存在(儿童,ts.Skip(1));
}
};
var root=new FolderTreeModel(){Title=“/”};

其余代码相同。

以下是您需要的代码:

Action<FolderTreeModel, IEnumerable<string>> ensureExists = null;
ensureExists = (ftm, ts) =>
{
    if (ts.Any())
    {
        var title = ts.First();
        var child = ftm.Children.Where(x => x.Title == title).SingleOrDefault();
        if (child == null)
        {
            child = new FolderTreeModel()
            {
                Title = title,
                Children = new List<FolderTreeModel>(),
            };
            ftm.Children.Add(child);
        }
        ensureExists(child, ts.Skip(1));
    }
};
…然后代码变得更简单一些:

Action<FolderTreeModel, IEnumerable<string>> ensureExists = null;
ensureExists = (ftm, ts) =>
{
    if (ts.Any())
    {
        var title = ts.First();
        var child = ftm.Where(x => x.Title == title).SingleOrDefault();
        if (child == null)
        {
            child = new FolderTreeModel() { Title = title };
            ftm.Add(child);
        }
        ensureExists(child, ts.Skip(1));
    }
};

var root = new FolderTreeModel() { Title = "/" };
Action-ensureExists=null;
ensureExists=(ftm,ts)=>
{
if(ts.Any())
{
var title=ts.First();
var child=ftm.Where(x=>x.Title==Title.SingleOrDefault();
if(child==null)
{
child=newfoldertreemodel(){Title=Title};
ftm.Add(儿童);
}
确保存在(儿童,ts.Skip(1));
}
};
var root=new FolderTreeModel(){Title=“/”};

代码的其余部分是相同的。

是否使用
WinForm
?查看
TreeView
定义
FolderTreeModel
的更好方法是
公共类FolderTreeModel:List{public string Title{get;set;}}}
@Ian取决于他是否想要实际显示它。不管怎样,这是一个美妙的周五下午,避免工作,挑战到目前为止你都做了些什么?你哪里有问题?路径解析(可以使用
Path.GetDirectoryName
String.Split
调用)?解析完整路径后的结构构建?@Rhumborl你是对的,我应该添加“…和TreeNode”)您是否使用
WinForm
?查看
TreeView
定义
FolderTreeModel
的更好方法是
公共类FolderTreeModel:List{public string Title{get;set;}}}
@Ian取决于他是否想要实际显示它。不管怎样,这是一个美妙的周五下午,避免工作,挑战到目前为止你都做了些什么?你哪里有问题?路径解析(可以使用
Path.GetDirectoryName
String.Split
调用)?解析完整路径后的结构构建?@Rhumborl你是对的,我应该添加“…和TreeNode”)
Action<FolderTreeModel, IEnumerable<string>> ensureExists = null;
ensureExists = (ftm, ts) =>
{
    if (ts.Any())
    {
        var title = ts.First();
        var child = ftm.Where(x => x.Title == title).SingleOrDefault();
        if (child == null)
        {
            child = new FolderTreeModel() { Title = title };
            ftm.Add(child);
        }
        ensureExists(child, ts.Skip(1));
    }
};

var root = new FolderTreeModel() { Title = "/" };