-1

我需要创建一个方法,通过嵌套列表中实体的 ID 查找根节点的路径。

public class Application
{
    public string Name { get; set; }
    public string Path { get; set; }
    public List<Component> Components { get; set; }
}

public class Component
{
    public string Name { get; set; }
    public string Path
    public List<Component> Components { get; set; }
}

例如:

-Name: Windows: 
-Path: "D:\Windows"
-components:
[0] Path: "Microsoft.net"
    Name: ".netfolder"
    Components: 
    [0] Path: "Framework"
        Name: ".netfolder"
        Components: 
        [0] Path: "v3.0"
            Name: "3.0folder"
            Components: 
    [1] Path: "Microsoft.net"
        Name: "Framework64"
        Components: 

如果我以“3.0folder”作为参数调用该方法,它应该返回每个节点的节点路径:

{ "D:\Windows", "Microsoft.net", "Framework", "v3.0" }
4

1 回答 1

0

您当前的设计使它有点棘手,我会为您的类引入一个父Component级,这将允许您向上遍历层次结构并构建路径。这意味着您只需要担心找到组件。

您也可以对搜索执行相同的操作,只是这次遍历层次结构,例如

public class Component
{
    public Component Parent { get; set; }
    public string Path { get; set; }
    public string Name { get; set; }
    public List<Component> Components { get; set; }
    public Component FindByName(string searchTerm)
    {
        if (searchTerm == Name)
            return this;

        var result = null;
        foreach (var c in Components)
        {
            var result = c.FindByName(searchTerm);
            if (result != null) 
                break;
        }
        return result;
    }

    public string FullPath
    {
        get { return this.GetFullPath(); }   
    }

    private string GetFullPath()
    {
        var fullPath = Path;
        var parent = Parent;
        while (parent != null)
        {
            fullPath = String.Format("{0}{1}{2}", parent.FullPath, System.IO.Path.DirectorySeparatorChar, fullPath)
        }
        return path;
    }
}

代码没有经过测试,但你明白了。每个组件都有向上/向下遍历树所需的信息。

此外,您应该Application派生自,Component以便它可以继承所有相同的属性/行为而无需复制代码。

于 2012-09-10T20:20:59.303 回答