在我的WinForm上,我希望在运行时显示每个Property(作为标签)及其值,具体取决于对象的类型。像这样:
public void ShowDetails(object anyType)
{
// Generate label per property and show value of the property against a label.
}
我怎样才能做到这一点?有超过100个类具有不同的属性。
我正在使用C#4.0。
答案 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
。您可以循环遍历所有属性(和子属性)
答案 2 :(得分:1)
我读了Reflection。它允许您在运行时访问类成员的属性名称和值。
答案 3 :(得分:1)
您可以轻松地将属性及其值存储在字典中
Dictionary<string,object> properties = anyType.GetType()
.GetProperties()
.ToDictionary(p=>p.Name,p=>p.GetValue(anyType,null));