访问未知类型的所有属性

时间:2012-10-15 14:01:24

标签: c# .net

在我的WinForm上,我希望在运行时显示每个Property(作为标签)及其值,具体取决于对象的类型。像这样:

public void ShowDetails(object anyType)
{
// Generate label per property and show value of the property against a label.
}

我怎样才能做到这一点?有超过100个类具有不同的属性。

我正在使用C#4.0。

4 个答案:

答案 0 :(得分:3)

你使用反射。

PropertyInfo[] properties = obj.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
    object propertyValue = property.GetValue(obj, null);
}

这应该足以让你开始。

您还可以从PropertyInfo中获取许多其他信息,例如属性名称,类型,可访问性等。请注意,拥有没有getter的属性是可能的(但非常罕见),因此您可能需要首先检查它。您也可能只想获取 public 属性,而不是所有属性。您还可能想要检查属性是否为索引器,因为它需要GetValue的第二个参数的非空值。哦,你还会得到返回的静态属性;你可能也可能不想要那些。

答案 1 :(得分:2)

使用System.Reflection.PropertyInfo。您可以循环遍历所有属性(和子属性)

MSDN link

答案 2 :(得分:1)

我读了Reflection。它允许您在运行时访问类成员的属性名称和值。

答案 3 :(得分:1)

您可以轻松地将属性及其值存储在字典中

Dictionary<string,object> properties = anyType.GetType()
                              .GetProperties()
                              .ToDictionary(p=>p.Name,p=>p.GetValue(anyType,null));
相关问题