代码之家  ›  专栏  ›  技术社区  ›  abmv

验证循环组织单元

  •  0
  • abmv  · 技术社区  · 14 年前

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

    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 回复  |  直到 14 年前
        1
  •  3
  •   dtb    14 年前

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

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