[c#]从树或列表层次结构中查找对象

标签: Linq C#
发布时间: 2017/2/28 21:25:35
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

上课一些,像我

public class Employee
{
    public Employee[] ChildOrg{get; set;}
    public string name {get; set;};
    public string id{get; set;};
}

我如何能找到特定雇员从其 id?

我试着用有点以下功能。

private static Employee GetNode(Employee objEmployeeList, string id)
{
    if (objEmployeeList.ChildOrg==null)
    {
        return null;
    }
    foreach (var item in objEmployeeList.ChildOrg)
    {
        if (item.ID.Equals(id))
        {
            return (objEmployeeList)item;
        }
    }
    foreach (var item in objEmployeeList.ChildOrg)
    {
        return GetNode((objEmployeeList)item, id);
    }
    return null;
}

正如你可以看到我正在写一些递归函数,以获取该雇员。

如果你仔细看它只是去只有第一个节点的底部。

然后它将返回 null 并且不会向任何其他节点。

请告诉我来纠正我的函数的方式和其他方式来完成使用 linq 的一样吗?

编辑:-

我想要访问特定节点和它的兄弟姐妹。

解决方法 1:

类和一些对常规的改变一些变化。

public class Employee
{
    public List<Employee> ChildOrg { get; set; }
    public string Name { get; set; }
    public string Id { get; set; }

    public Employee(string id, string name)
    {
        Id = id;
        Name = name;
        ChildOrg = new List<Employee>();
    }

    public Employee AddChildOrg(string id, string name)
    {
        var newEmployee = new Employee(id, name);
        ChildOrg.Add(newEmployee);
        return newEmployee;
    }

    public static Employee GetNode(Employee father, string id)
    {
        if (father != null)
        {
            if (father.Id.Equals(id))
                return father;


            if (father.ChildOrg != null)
                foreach (var child in father.ChildOrg)
                {
                    if (child.Id.Equals(id))
                        return child;

                    var employee = Employee.GetNode(child, id);

                    if (employee != null)
                        return employee;
                }
        }
        return null;
    }
}

和一个小的测试程序︰

class Program
{
    static void Main(string[] args)
    {
        Employee root = new Employee(1.ToString(), "root");
        var e2 = root.AddChildOrg(2.ToString(), "2 second level");
        var e3 = e2.AddChildOrg(3.ToString(), "3 third level");
        var e1 = root.AddChildOrg(4.ToString(), "4 second level");
        var e5 = e1.AddChildOrg(5.ToString(), "5 third level");

        Console.WriteLine("Id 3 -> {0}", Employee.GetNode(root, "3").Name);
        Console.WriteLine("Id 1 -> {0}", Employee.GetNode(root, "1").Name);
        Console.WriteLine("Id 5 -> {0}", Employee.GetNode(root, "5").Name);
        Console.ReadKey();
    }
}
官方微信
官方QQ群
31647020