2010-03-28 4 views
0

I une unité d'organisation objet et j'ai une auto référence dans le même objetValider unité d'organisation cyclique

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


} 

je besoin d'une méthode qui jetteront une exception si elle trouve une unité d'organisation enfant le troisième niveau fait référence à une unité d'organisation parente, ou à une organisation parente cyclique.

  • A est principal B géré par un C ne peut pas être géré par un

Répondre

3

Marchez le graphique et conserver un historique des nœuds visités. Si vous visitez à nouveau un nœud, vous avez détecté un cycle:

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