1

在我的 WinForm 上,我想根据对象的类型在运行时显示每个属性(作为标签)及其值。像这样的东西:

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

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

我正在使用 C# 4.0。

4

4 回答 4

3

你使用反射。

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

这应该足以让你开始。

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

于 2012-10-15T14:04:52.417 回答
2

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

Dictionary<string,object> properties = anyType.GetType()
                              .GetProperties()
                              .ToDictionary(p=>p.Name,p=>p.GetValue(anyType,null));
于 2012-10-15T14:08:46.963 回答
2

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

MSDN 链接

于 2012-10-15T14:04:16.993 回答
1

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

于 2012-10-15T14:04:49.787 回答