【问题标题】:How to iterate through all properties (sub/child properties included) of an object in a PCL project?如何遍历 PCL 项目中对象的所有属性(包括子/子属性)?
【发布时间】:2017-05-19 11:47:16
【问题描述】:

我想创建一个方法,它可以接受“从 Object 数据类型继承的任何类型”(通用)作为参数,然后遍历它的所有属性。

我试过了:

foreach (var prop in obj.GetType().GetProperties())
{
    Console.WriteLine("{0} = {1}", prop.Name, prop.GetValue(obj, null));
}

GetProperties() 方法在 PCL 项目中不存在。

【问题讨论】:

    标签: c# portable-class-library


    【解决方案1】:

    在大多数 PCL 配置文件中,至少是基于 .NET 4.5 的配置文件,您应该使用 TypeInfo 而不是 Type 来获取类型信息。

    基本上你可以用

    替换obj.GetType().GetProperties()
    obj.GetType().GetTypeInfo().GetProperties()
    

    对于为特定类型声明的所有属性的列表,请使用DeclaredProperties 而不是GetProperties()。对于属性的完整列表,包括继承、非公共、实例和静态属性,您可以使用扩展方法 GetRuntimeProperties()

    有关TypeInfo 的更多信息,请参阅MSDN documentation

    【讨论】:

    • 谢谢。这行得通。我稍微编辑了我的问题,之前还不够清楚,或者您只是忽略了我需要遍历所有属性,甚至是子/子属性。我认为递归是最简单的。但我不知道如何检查当前对象是 int 还是 List 或用户自定义对象。这样我就会知道我是否需要更深入地了解对象。
    • 我想说,从问题或示例中仍然不清楚这是您想要做的。我建议您在单独的问题中询问该答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多