在我的 WinForm 上,我想根据对象的类型在运行时显示每个属性(作为标签)及其值。像这样的东西:
public void ShowDetails(object anyType)
{
// Generate label per property and show value of the property against a label.
}
我怎样才能做到这一点?有 100 多个具有不同属性的类。
我正在使用 C# 4.0。
你使用反射。
PropertyInfo[] properties = obj.GetType().GetProperties();
foreach (PropertyInfo property in properties)
{
object propertyValue = property.GetValue(obj, null);
}
这应该足以让你开始。
您还可以从中获取许多其他信息,PropertyInfo
例如属性的名称、类型、可访问性等。请注意,可能(但非常罕见)拥有没有 getter 的属性,因此您可能需要先检查一下。您也可能只想获取公共属性,而不是所有属性。您可能还想检查该属性是否为索引器,因为它的第二个参数需要一个非空值GetValue
。哦,您还将返回静态属性;你可能想要也可能不想要这些。
您可以轻松地将属性及其值存储在字典中
Dictionary<string,object> properties = anyType.GetType()
.GetProperties()
.ToDictionary(p=>p.Name,p=>p.GetValue(anyType,null));
使用System.Reflection.PropertyInfo
. 您可以遍历所有属性(和子属性)
我会阅读Reflection。它将允许您在运行时访问类成员的属性名称和值。