Рекурсивно просматривать свойства определенного типа - PullRequest
0 голосов
/ 18 октября 2010

РЕДАКТИРОВАТЬ: Похоже, их не проще сделать это.Учитывая размер структуры классов, подход foreach кажется самым простым (и, вероятно, лучшим) способом достижения моей цели.Я оставляю вопрос открытым на тот случай, если у кого-то есть блестящая идея.:)


Привет всем,

У меня есть список классов со структурой, подобной этой:

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

[...]

Мне нужно создать метод всамый внешний класс (в данном случае D), который будет иметь следующую подпись:

public IEnumerable<A> GetListOfA();

Он будет рекурсивно (yield) возвращать список экземпляров A, содержащихся в экземпляре D.

Текущая реализация представляет собой список жестко закодированных foreach.Я хотел бы сделать это немного более гибким, динамически просматривая свойства каждого класса и подкласса.

Просто, чтобы дать вам больше подробностей, структура класса создается из XML-отчета FxCop.Сообщения FxCop могут быть связаны с пространством имен, модулем, типом, членом и т. Д. XML десериализуется в структуру этого класса, и сообщения могут быть найдены на разных уровнях структуры.

Что яхочу достичь - это на самом деле эквивалент XPath //A по структуре классов.

Не могли бы вы представить, как реализовать такой метод?

Большое спасибо за вашу помощь

Ответы [ 2 ]

1 голос
/ 18 октября 2010

Вы можете использовать отражение, чтобы проверить, существует ли метод или свойство определенного типа (Type.GetMethods ...) или существует метод с определенным типом возврата.

0 голосов
/ 18 октября 2010

Я думаю, вам не следует пытаться, если вы хотите достичь этой способности, я предлагаю вам сохранить коллекцию всех А в D, которая будет наблюдать за всеми вами, членами ребенка, и ребенок будет наблюдать за их детьми и так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...