c# - 在树结构中通过 ID 属性定位实例

标签 c# .net linq tree

我有一个 C# 类,其中包含与其属性之一相同的类的列表:

class MyClass
{
    string id;
    List<MyClass> children;
    //other properties

    public MyClass(string Id, List<MyClass> Children)
    {
        id = Id;
        children = Children;
    }
}

在我的程序中,此类用于创建树结构(因此,某些项目不会有子项目)。有没有办法在结构中找到一个 ID,然后从那里向下递归树以获得父节点数组?

我知道这类似于 TreeView.FindNode() 但我想尽可能避免使用派生类。

最佳答案

我会用递归来做:

List<MyClass> GetPathToId(string id2find)
{
    if (Id == id2find) return new List<MyClass>(new[] { this });

    if (Children == null) return null;

    List<MyClass> result = Children.Select(e => e.GetPathToId(id2find)).FirstOrDefault(r => r != null);
    if (result != null) result.Insert(0, this);

    return result;
}

更新:正如医生正确指出的那样,由于我不知道你的类(class),Children 可能为空。我添加了空检查。

关于c# - 在树结构中通过 ID 属性定位实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34359747/

相关文章:

c# - 带有 Razor 的 MVC 4 中的 DropDownList

c# - 我什么时候应该使用中性文化?它有什么必要?为什么不强制使用特定文化?

.net - C++ ~ 1M 在 unordered_map 中使用字符串键查找比 .NET 代码慢得多

c# - 是否可以将 Cortana 用于应用内语音命令?

c# - 检查字符串是否包含 key

c# - 将匿名类型转换为数组或数组列表。可以做吗

c# - 转换列表<T>(其中 T : IBar) to ICollection<IBar> fails

c# - Mono.Cecil type.IsAssignableFrom(derivedType) 等效项

c# - 是否可以为 .NET 中的类定义别名?

c# - 解析所有可能类型的不同架构维度输入