获取对象的所有属性[重复]

Posted

技术标签:

【中文标题】获取对象的所有属性[重复]【英文标题】:Getting ALL the properties of an object [duplicate] 【发布时间】:2011-09-20 15:55:37 【问题描述】:

我有这样的对象:

some_object

这个对象有大约 1000 个属性。

我想像这样遍历每个属性:

foreach (property in some_object)
//output the property

有没有简单的方法可以做到这一点?

【问题讨论】:

你检查过这些答案了吗:***.com/questions/737151/… 【参考方案1】:

你可以使用反射。

// Get property array
var properties = GetProperties(some_object);

foreach (var p in properties)

    string name = p.Name;
    var value = p.GetValue(some_object, null);


private static PropertyInfo[] GetProperties(object obj)

    return obj.GetType().GetProperties();

但是,这仍然不能解决您有一个具有 1000 个属性的对象的问题。

【讨论】:

【参考方案2】:

深度搜索道具的更好版本也在基本类型中

public static IEnumerable<PropertyInfo> GetAllProperties(Type t)

  if (t == null)
    return Enumerable.Empty<PropertyInfo>();

  BindingFlags flags = BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly;
    return t.GetProperties(flags).Union(GetAllProperties(t.BaseType));

【讨论】:

【参考方案3】:

在这种情况下可以使用的另一种方法是将对象转换为 JSON 对象。 JSON.NET 库使这变得简单,几乎任何对象都可以用 JSON 表示。然后,您可以将对象属性作为名称/值对进行循环。这种方法对于包含其他对象的复合对象很有用,因为您可以像树一样遍历它们。

MyClass some_object = new MyClass()  PropA = "A", PropB = "B", PropC = "C" ;
JObject json = JObject.FromObject(some_object);
foreach (JProperty property in json.Properties())
    Console.WriteLine(property.Name + " - " + property.Value);

Console.ReadLine();

【讨论】:

这是一个奇妙而简单的解决方案。自动处理所有子对象,无需担心递归或自己获取所有属性。【参考方案4】:

您想要以下之一,选择最适合您的:

反思: http://msdn.microsoft.com/en-us/library/136wx94f.aspx

动态类型: http://msdn.microsoft.com/en-us/library/dd264741.aspx

尽管正如有人已经指出的那样,具有 1000 个属性的类是代码异味。您可能想要一个字典或集合,

【讨论】:

【参考方案5】:

你使用反射。

甚至还有一篇文章描述了如何做你想做的事:-

http://geekswithblogs.net/shahed/archive/2006/11/19/97548.aspx

【讨论】:

【参考方案6】:
using System.Reflection;  // reflection namespace

// get all public static properties of MyClass type
PropertyInfo[] propertyInfos;
propertyInfos = typeof(MyClass).GetProperties(BindingFlags.Public |
                                              BindingFlags.Static);
// sort properties by name
Array.Sort(propertyInfos,
        delegate(PropertyInfo propertyInfo1, PropertyInfo propertyInfo2)
         return propertyInfo1.Name.CompareTo(propertyInfo2.Name); );

// write property names
foreach (PropertyInfo propertyInfo in propertyInfos)

  Console.WriteLine(propertyInfo.Name);

来源:http://www.csharp-examples.net/reflection-property-names/

【讨论】:

Linq 众神现在哭了……

以上是关于获取对象的所有属性[重复]的主要内容,如果未能解决你的问题,请参考以下文章

将对象属性的所有值提取到 Typescript 中的新数组 [重复]

使用其值获取对象的属性名称[重复]

试图在[重复]中获取非对象的属性

通过属性值从对象数组中获取JavaScript对象[重复]

通过属性值从对象数组中获取JavaScript对象[重复]

如何在python中获取对象的属性[重复]