从树或列表层次结构中查找对象

从树或列表层次结构中查找对象

我正在上课

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 完成相同操作的其他方法?

编辑:-

我想访问特定节点及其兄弟节点。

最佳答案

类(class)的一些变化和例程的一些变化。

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();
    }
}

关于c# - 从树或列表层次结构中查找对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27424580/

10-13 03:15