我正在做一个审计课。为此我有两个相同类型的对象,但我不知道是什么类型。 要审计我只需要在人类阅读文档中有意义的属性。
所以我只想要自定义对象道具的名称(或主要标识符)。
示例:如果我有一个部门而且我更换了经理。我只需要记录新的经理名称。 “经理:约翰 - 比尔”
那么我怎样才能列出主要属性?
- 更多关于
要定义主标识符,我正在使用customAttribute:
[audit]
public string Name { get; set; }
所以,我正在考虑从列表中选择它们,除了原语之外,用:
var propsOfObject = objectToAudit.GetType().GetProperties();
foreach (PropertyInfo propertyInfo in propsOfObejct) {
IEnumerable<FieldInfo> props = propertyInfo.GetType().GetFields().Where(p => Attribute.IsDefined(p, typeof (AuditAttribute)));
if (props.Count() > 0) {
dicWithNameValue.Add(propertyInfo.GetType().FullName, props.First().GetValue(objectToAudit).ToString());
}
}
正确的方法?
答案 0 :(得分:2)
我认为应该是这样的
IEnumerable<FieldInfo> props = propertyInfo.GetType().GetFields()
.Where(f => f.GetCustomAttributes(true).OfType<AuditAttribute>());
您尝试使用的 FieldInfo.Attributes
会返回类型为enum
的{{1}},并用于其他目的。请参阅msdn。