2009-05-28 7 views
4

J'ai une simple classe définie comme:méthode pour compter tous les éléments de la liste d'objets hierarchiques

public class MyClass 
{ 
    //Some properties 
    public List<MyClass> SubEntries { get; set; } 
    //Some more properties 
} 

Dans une autre classe, j'ai une liste du type ci-dessus. En ce moment, j'ai un bloc mental sérieux. J'ai juste besoin d'itérer à travers la liste et de compter toutes les occurrences de MyClass. Puisque la propriété SubEntries peut contenir 0 ou plusieurs entrées qui peuvent elles-mêmes contenir 0 ou plusieurs entrées, il me semble que j'ai besoin d'une sorte de méthode de récurrence, à moins que LINQ ne fournisse un mécanisme pour le faire.

Toute aide libérant cette confusion mentale serait appréciée.

+0

Autorisez-vous des cycles dans votre structure? – Grzenio

+0

Non, il n'y a pas besoin dans ce cas. –

Répondre

9

Supposons que vous ne me dérange pas récursion l'arbre, et en supposant que la liste est toujours non nul et ne dispose pas de cycles:

public class MyClass 
{ 
    public List<MyClass> SubEntries { get; set; } 

    public int SubEntryCount 
    { 
     get { return 1 + SubEntries.Sum(x => x.SubEntryCount); } 
    } 
} 

Vous pouvez le renommer afin qu'il soit clair, il est un total nombre de sous-entrées, pas seulement les enfants immédiats.

+0

Comme toujours. Merci pour une réponse rapide et utile. –

+0

@JonSkeet Pouvez-vous expliquer: pourquoi avons-nous besoin de 1+ dans le getter SubEntryCount? – Jamaxack

+0

@Jamaxack: Je crois que l'OP voulait inclure l'élément lui-même, fondamentalement. Mais il est difficile de me souvenir de mon raisonnement exact d'il y a 5 ans et demi :) –

Questions connexes