2010-03-28 56 views
0

我有一个目标组织单位和我在同一个对象验证循环组织单位

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不能由一个

回答

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