当前位置:  开发笔记 > 编程语言 > 正文

如何使用Reflection获取类的所有属性及其基类(在层次结构中)?(C#)

如何解决《如何使用Reflection获取类的所有属性及其基类(在层次结构中)?(C#)》经验,为你挑选了3个好方法。

所以我现在所拥有的是这样的:

PropertyInfo[] info = obj.GetType().GetProperties(BindingFlags.Public);

obj某个对象在哪里.

问题是我想要的一些属性不在于obj.GetType()它们在其中一个基类中.如果我停止调试器并查看obj,我必须挖掘一些"基础"条目以查看我想要获得的属性.是否有一些绑定标志我可以设置让它返回那些或我是否必须递归挖掘Type.BaseType层次结构并对GetProperties所有这些做?



1> Panos..:

用这个:

PropertyInfo[] info = obj.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

编辑:当然,正确答案是杰伊.GetProperties()没有参数相当于GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static ).本BindingFlags.FlattenHierarchy次没有作用在这里.



2> Jay Bazuzi..:

我不认为这很复杂.

如果您将BindingFlags参数移除到GetProperties,我想您会得到您正在寻找的结果:

    class B
    {
        public int MyProperty { get; set; }
    }

    class C : B
    {
        public string MyProperty2 { get; set; }
    }

    static void Main(string[] args)
    {
        PropertyInfo[] info = new C().GetType().GetProperties();
        foreach (var pi in info)
        {
            Console.WriteLine(pi.Name);
        }
    }

产生

    MyProperty2
    MyProperty



3> Seibar..:

如果您访问Type.BaseType,则可以获得基本类型.您可以递归访问每种基本类型,并且当您的类型为时,您将知道何时触及底部System.Object.

Type type = obj.GetType();
PropertyInfo[] info = type.GetProperties(BindingFlags.Public);
PropertyInfo[] baseProps = type.BaseType.GetProperties(BindingFlags.Public);


爱你的男人.好的.人们为什么投票拒绝这个?
推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有