【发布时间】:2014-10-03 10:26:52
【问题描述】:
我对递归比较陌生。我遇到了一个奇怪的情况。正如您在下面看到的,我正在为一个复杂的部门填充员工。一个复杂部门下可以有一个或多个简单部门和复杂部门。它还有一个员工集合(列表)。当我通过这个进行调试时,第一个部门很复杂,所以它会递归,在那里我看到员工被正确填充并且员工集合计数为 2,但是当它从递归调用中出来,员工收集计数再次设置为零。关于我在这里可能做错的任何想法?
private void PopulateEmployees(ComplexDepartment complex)
{
foreach (var dep in complex.Departments)
{
if (dep is SimpleDepartment)
{
var simple = dep as SimpleDepartment;
complex.employees.Add(GetEmployee(simple));
}
else if (dep is ComplexDepartment)
{
PopulateEmployees(dep as ComplexDepartment);
}
}
}
private Employee GetEmployee(SimpleDapartment simple)
{
var employee = new Employee();
// some code here
return employee;
}
【问题讨论】:
-
当您在
else if分支中递归时,您会将其他员工添加到department的集合中... -
您正在为子复杂部门填充员工。当您从递归调用中返回时,您正在查看父部门,实际上您并没有直接添加任何内容。