我只想从通用属性中获取所有域对象的主标识符 代码到现在为止:
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的属性的类型。例如:
部门是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() : "";
答案 0 :(得分:1)
这将是您的对象的实例
string value = element.GetValue(justAuditElementProperties.GetValue(genericObject, null), null).ToString();
答案 1 :(得分:0)
应该是您的genericObject
。
就我可以编译而言,你只是通过genericObject
的属性进行迭代。识别具有“AuditeAttribute”的属性,然后获取它的值。
有关完整详情,请参阅MSDN