递归查看特定类型的属性

时间:2010-10-18 07:35:25

标签: c# recursion lookup

编辑:看起来他们并不是简单的方法。鉴于类结构的大小,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)返回D实例中包含的A实例列表。

当前的实现是一个硬编码的foreach列表。我想通过动态查看每个类和子类的属性来使事情变得更灵活。

为了给您提供更多细节,类结构是从FxCop XML报告创建的。 FxCop消息可以链接到命名空间,模块,类型,成员等.XML被反序列化为此类结构,消息可以在结构的不同级别找到。

我想要实现的实际上相当于类结构上的XPath //A

您是否了解如何实施此类方法?

非常感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以使用反射来检查特定类型的方法或属性是否存在(Type.GetMethods ...),或者是否存在具有特定返回类型的方法。

答案 1 :(得分:0)

我认为你不应该尝试,如果你想要达到这个能力,我建议你保留D中所有A的集合,这将观察你们所有的孩子,孩子会观察他们的孩子等等。