【发布时间】:2011-05-17 04:40:58
【问题描述】:
我只想从通用属性的所有域对象中获取主要标识符。
到现在为止的代码:
IEnumerable<PropertyInfo> customProperties = genericObject.GetType().GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
foreach (PropertyInfo justAuditElementProperties in customProperties) {
IEnumerable<PropertyInfo> elementsToAudit = justAuditElementProperties.PropertyType.GetProperties().Where(p => Attribute.IsDefined(p, typeof (AuditeAttribute)));
foreach (PropertyInfo element in elementsToAudit) {
string name = justAuditElementProperties.PropertyType.FullName + "." + element.Name;
string value = element.GetValue( ? , null).ToString();
atributoNomeValor.Add(name, value);
}
}
的正确替换是什么?
--
所以重要的是要说每个主要标识符都有[Audite]属性
编辑
的类型?是genericObject 的Property 的类型。示例:
部门是genericObject。
经理是财产。
所以在这种情况下,我想要element.GetValue( ? , null).ToString();,其中该元素在 Manager 类中声明为:
[Audite]
public string name { get; set; }
解决方案
这使用来自@liho1eye 的解决方案,我只是添加了一个空引用验证,这给我带来了一些问题。
var propertyParent = justAuditElementProperties.GetValue(genericObject, null);
string value = propertyParent != null ? element.GetValue(propertyParent, null).ToString() : "";
【问题讨论】:
标签: c# generics reflection