-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 に答える