2013-01-05 3 views
1

J'ai une classe qui organise dans une structure arborescente en incluant éventuellement des listes de lui-même, quelque chose comme:Un élément de collection peut-il référencer la collection?

class MyClass 
{ 
    List<MyClass> MyClassList; 
    ... 
} 

Est-il possible un élément peut appeler sa collection parent? Comme,

class MyClass 
{ 
    List<MyClass> MyClassList; 
    ... 

    private void AddItemToParentCollection() 
    { 
     parent.MyClassList.Add(new MyClass()); 
    } 
} 

Je pense que je pourrais écrire une fonction qui indique une classe où il est dans l'arbre (et donc où il est parent) en traversant l'arbre jusqu'à ce qu'il se trouve, mais j'espère qu'il ya un manière plus propre.

+0

Comment votre structure de données pour représenter l'arbre? Pouvez-vous poster le code correspondant? –

+0

Qu'essayez-vous d'atteindre exactement? Bien sûr, si vous passez une référence au parent dans l'enfant, l'enfant peut appeler des méthodes dessus. – lahsrah

+0

Vous avez besoin d'une association bidirectionnelle entre parent et enfant (chaque enfant doit avoir une référence au nœud parent) –

Répondre

1
class Node 
{ 
    Node parent; 
    List<Node> children = new List<Node>(); 

    public void Add(Node child) 
    { 
     if (child.Parent != null) 
      // throw exception or call child.Parent.Remove(child) 

     children.Add(child); 
     child.Parent = this; 
    } 

    public void Remove(Node child) 
    { 
     if (child.Parent != this) 
      // throw exception 

     children.Remove(child); 
     child.Parent = null; 
    } 
} 

Avec une telle structure, vous pouvez ajouter des éléments à la collection parent (pas sûr qu'il devrait être la responsabilité du nœud enfant):

private void AddItemToParentCollection() 
{ 
    if (Parent == null) 
     // throw exception 

    Parent.Add(new Node()); 
} 
+1

Merci, ça va marcher. –

Questions connexes