Recursive方法检查Employee是否是Boss

时间:2012-10-16 16:59:18

标签: c# recursion

我有一个UserId和ManagerId的表。编辑此表时,我需要确保这一点 如果Jim是Jills的经理,而Ron是Marks的经理,那么我就不应该将Mark设为Jim经理,因为它会在infinate循环中创建。我想验证一个可以将Manager字段设置为UserId的表单。

1 个答案:

答案 0 :(得分:4)

我没有看到无限循环...... Ron是Marks经理,Jim是Jills经理。如果你将Mark设为Jims经理,那么你将拥有一个线性管理树。罗恩 - > Mark-> Jim->吉尔。不需要递归:-)

我理解您要完成的任务,但更多信息可以提供更好的洞察力来帮助您。这些员工是表格还是表格的实体?

我假设每个员工只有一名经理。因此,在将员工设置为其他人的经理时,请向上推进线性树以查看它是否有效,如下所示:

//Assume managerName is "Mark" and employeeName is "Jim", as in your example above
public bool isManagerValid(string managerName, string employeeName)
{
    bool valid = true;
    var manager = getEmployee("Mark"); //The "to-be" manager of Jim
    var employee= getEmployee("Jim");

    var currentManager = getEmployee(manager.Manager); //Get Marks manager
    while(currentManager != null && valid)
    {
        if(currentManager == employee)
        {
            valid = false; //Some manager up the line from Mark is already Jim 
        }
        else
        {
            //Get the next manager up
            currentManager = getEmployee(currentManager.Manager);
        }
    }
    return valid;
}

我没有在视觉工作室尝试这个,在这里输入,所以如果有任何拼写错误,请原谅我