验证循环组织单位

时间:2010-03-28 12:48:55

标签: c# validation methods

我有一个对象组织单位,我在同一个对象中有一个自引用

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是由A C管理的主要B不能由A
  • 管理

1 个答案:

答案 0 :(得分:3)

浏览图表并保留受访节点的历史记录。如果再次访问节点,则检测到一个周期:

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
        }
    }
}