2010-10-18 5 views
0

EDIT: Il semble que ce n'est pas une manière simple de le faire. Compte tenu de la taille de la structure de classe, l'approche foreach semble être le moyen le plus facile (et probablement le meilleur) d'atteindre mon objectif. Je laisse la question ouverte au cas où quelqu'un aurait une idée géniale. :)Recherche récursive dans les propriétés du type spécifique


Salut à tous,

J'ai une liste des classes avec une structure similaire à celle-ci:

class A 
{ 
    ... 
} 

class B 
{ 
    ... 

    public List<A> ListOfA {...} 
} 

class C 
{ 
    ... 

    public List<A> ListOfA {...} 
    public List<B> ListOfB {...} 
} 

class D 
{ 
    ... 

    public List<A> ListOfA {...} 
    public List<B> ListOfB {...} 
    public List<C> ListOfC {...} 
} 

[...] 

Je dois créer une méthode dans la plus externe de classe (D dans ce cas), qui aurait la signature suivante:

public IEnumerable<A> GetListOfA(); 

Il récursive (rendement) retourner la liste des insta nces de A contenu dans une instance de D.

L'implémentation actuelle est une liste de foreach codés en dur. Je voudrais rendre la chose un peu plus flexible en examinant de manière dynamique les propriétés de chaque classe et sous-classe.

Juste pour vous donner plus de détails, la structure de classe est créée à partir du rapport XML FxCop. Les messages FxCop peuvent être liés à un espace de nommage, un module, un type, un membre, etc. Le XML est désérialisé dans cette structure de classe et les messages peuvent être trouvés à différents niveaux de la structure. Ce que je veux réaliser est en fait l'équivalent de XPath //A sur une structure de classe.

Auriez-vous une idée sur la façon de mettre en œuvre une telle méthode?

Merci beaucoup pour votre aide

+2

Il n'y a pas de hiérarchie dans votre 'hiérarchie' affichée ... Il s'agit simplement d'un tas de types d'encapsulation. – leppie

+0

Implémentez simplement 'GetListOfA' dans toutes les classes qui ont besoin de le faire. par exemple. en D, vous appelez régulièrement 'GetListOfA' et' foreach GetListOfA' sur toutes les listes de membres. –

+0

Il n'y a pas de hiérarchie de classes du point de vue de la POO. mais c'est un du point de vue des données, bien que ce ne soit pas évident en raison des noms stupides des classes. Merci pour votre commentaire, je vais mettre à jour les balises –

Répondre

1

Vous pouvez utiliser la réflexion pour vérifier si une méthode ou une propriété d'un type spécifique existe (Type.GetMethods ...) ou si une méthode avec un type de retour spécifique existe.

+0

Je pense que votre approche est juste, après quelques réflexions et quelques tests, j'ai fini par laisser le groupe de foreach comme ils sont en ce moment. La réflexion récursive serait beaucoup trop complexe pour aucun avantage. Je m'attendais à avoir manqué une façon évidemment simple de le faire. Je vous remercie –

0

Je pense que vous ne devriez pas essayer, si vous voulez atteindre cette capacité, je vous suggère de maintenir une collection de tous les A à D, qui observera vous tous les membres de l'enfant et l'enfant observera leurs enfants et ainsi de suite.

Questions connexes