Подтвердить циклическое организационное подразделение - PullRequest
0 голосов
/ 28 марта 2010

У меня есть объект Organisation Unit, и у меня есть собственная ссылка на него в том же объекте

public class OrganizationUnit: IOrganizationUnit  {

        private string fName;

        public string Name {
            get { return fName; }
            set { SetPropertyValue("Name", ref fName, (string) value); }
        }



        private OrganizationUnit fManagedBy;

        public IOrganizationUnit ManagedBy {
            get { return fManagedBy; }
            set {

                SetPropertyValue("ManagedBy", ref fManagedBy, (OrganizationUnit)value);
            }
        }


}

Мне нужен метод, который будет генерировать исключение, если он обнаружит дочернюю организационную единицу на третьем уровне, ссылающуюся на родительскую организационную единицу или сказать циклическую родительскую организацию. A является основным B, управляемым A C, не может управляться A

1 Ответ

3 голосов
/ 28 марта 2010

Пройдите по графику и сохраните историю посещенных узлов. Если вы снова посетите узел, вы обнаружили цикл:

void CheckCycles(IOrganizationUnit unit)
{
    var visited = new HashSet<IOrganizationUnit>();

    for (var current = unit; current != null; current = current.ManagedBy)
    {
        if (!visited.Add(current))
        {
            throw new Exception(); // cycle detected
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...