【发布时间】:2020-03-12 10:11:00
【问题描述】:
我得到一个类似于下面的 SOAP 响应:
<Record>
<EmployeeId>1</EmployeeId>
<ManagerId>5</ManagerId>
</Record>
<Record>
<EmployeeId>9</EmployeeId>
<ManagerId>7</ManagerId>
</Record>
我创建了一个具有以下属性的 Manager 类:
class Manager
{
public int Id { get; set; }
public List<int> Employees { get; set; }
}
然后我遍历响应中的记录以填充经理列表:
List<Manager> managers = new List<Manager>();
foreach (Record record in records)
{
Manager manager = managers.Find(m => m.Id == ManagerId);
if (manager == null)
{
manager = new Manager
{
Id = ManagerId,
Employees = new List<int>
{
EmployeeId
},
};
managers.Add(manager);
}
else
{
if (!manager.Employees.Contains(EmployeeId))
{
manager.Employees.Add(EmployeeId);
}
}
}
问题是,如果经理的员工列表中有另一位经理,我需要将第二位经理的员工添加到第一位经理的员工列表中,并且如果这些员工中的任何一位也是经理,我也需要添加他们,这深入多个层次。
我想这将需要某种递归,我尝试过的一切都变得过于复杂且效率非常低。
我应该使用其他东西而不是包含列表的对象列表吗? 或者谁能指出我正确的方向?
【问题讨论】:
-
您是否有理由在添加之前检查员工列表是否包含员工(即您是否从服务中获取重复记录)?
-
@theMayer 是的,有重复记录,同一员工的多个经理的记录,以及自己作为经理的员工的记录。
-
好的,所以编写清理逻辑意味着你必须定义它是什么。除非你处理好,否则以自我为经理的员工将导致无限循环。