代码之家  ›  专栏  ›  技术社区  ›  Johann Blais

递归地查看特定类型的属性

  •  0
  • Johann Blais  · 技术社区  · 14 年前

    编辑:看起来他们这样做不是一个简单的方法。考虑到类结构的大小,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 回复  |  直到 14 年前
        1
  •  1
  •   testalino    14 年前

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

        2
  •  0
  •   Chen Kinnrot    14 年前

    我认为你不应该尝试,如果你想达到这个能力,我建议你保持一个收集所有的A在D,那将观察所有你的孩子成员,并且孩子将观察他们的孩子等等。