2010-03-28 60 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 
     } 
    } 
}