如何知道c#中属性位置的层次结构?

时间:2013-03-13 09:18:01

标签: c# reflection

例如,我有以下课程。

public class Level1
{
    public int intprop;
    public Level2 level2;
}

public class Level2
{   
    public string strprop;
    public Level3 level3;
}

public class Level3
{
    public float fltprop;
}

现在如果我得到fltprop,那么如何知道这个属性层次结构就像这样 Level1.level2.level3.fltpro

有没有办法反思知道属性位置的层次结构?

更新

如果您查看Level1到Level3类,可以看到fltprop位于Level1 =>内。 level2 => level3 => fltprop。

现在通过使用反射,如果我得到fltprop作为PropertyInfo,那么我可以知道这个属性来自Level1 => level2 => 3级?意味着获取propertyinfo然后我知道该属性的根级别3然后知道level3的根级别2然后知道level2的根是level1。

1 个答案:

答案 0 :(得分:2)

  

有没有办法反思知道属性位置的层次结构?

没有。没有。

当您阅读该属性时(实际上它现在是一个字段),您只需要一个值。没有关于您从中读取它的对象类型的信息。当你拥有对象本身(Level3对象)时,编译器或运行时无法告诉你从哪里获得该对象。也许您刚刚创建了Level3的新实例,或者您可能是从另一个对象的属性中读取它。你只知道,而不是运行时。

编辑:

假设您将PropertyInfo的{​​{1}}以及fltprop类型的对象传递给方法。该方法的所有信息都是属性名称为Level3,它来自fltprop类型。这并没有告诉方法传递给方法的Level3 对象来自。这也不存储在Level3类型信息中。实际上,当您阅读Level3的类型信息时,无论您如何获得类型,它都是相同的:

Level3