只需通过反射选择一个类型的字段的主要标识符

时间:2011-05-13 21:01:50

标签: c# reflection audit

我正在做一个审计课。为此我有两个相同类型的对象,但我不知道是什么类型。 要审计我只需要在人类阅读文档中有意义的属性。

所以我只想要自定义对象道具的名称(或主要标识符)。

示例:如果我有一个部门而且我更换了经理。我只需要记录新的经理名称。 “经理:约翰 - 比尔”

那么我怎样才能列出主要属性?

- 更多关于
要定义主标识符,我正在使用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());
    }
}

正确的方法?

1 个答案:

答案 0 :(得分:2)

我认为应该是这样的

IEnumerable<FieldInfo> props = propertyInfo.GetType().GetFields()
                        .Where(f => f.GetCustomAttributes(true).OfType<AuditAttribute>());
您尝试使用的

FieldInfo.Attributes会返回类型为enum的{​​{1}},并用于其他目的。请参阅msdn