我在上课
public class Employee
{
public Employee[] ChildOrg{get; set;}
public string name {get; set;};
public string id{get; set;};
}
Run Code Online (Sandbox Code Playgroud)
如何从其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;
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我正在尝试编写一些递归函数来获取员工。
如果仔细看,它只会到达第一个节点的底部。
然后,它返回null且不去任何其他节点。
请告诉我纠正我的功能的方法以及使用linq完成相同操作的其他方法吗?
编辑:-
我想访问特定的节点及其同级节点。
类中的某些更改和例程中的某些更改。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
和一个小的测试程序:
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();
}
}
Run Code Online (Sandbox Code Playgroud)