Просто выберите основной идентификатор полей, которые находятся в типе по отражению - PullRequest
1 голос
/ 14 мая 2011

Я делаю аудиторский класс. Для этого у меня есть два объекта одного типа, но я не знаю, какой тип. Для аудита мне просто нужны свойства, которые имеют смысл в читаемом человеком документе.

Итак, я просто хочу имя (или основной идентификатор) пользовательских объектов.

Пример: если у меня есть отдел, и я меняю менеджера. Мне нужно войти только имя нового менеджера. "Менеджер: Джон - Билл"

Так, как я могу перечислить только основные свойства?

- подробнее о
Для определения основного идентификатора я использую 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 Ответ

2 голосов
/ 14 мая 2011

Я думаю, что это должно быть так

IEnumerable<FieldInfo> props = propertyInfo.GetType().GetFields()
                        .Where(f => f.GetCustomAttributes(true).OfType<AuditAttribute>());

FieldInfo.Attributes, которое вы пытаетесь использовать, возвращает enum типа FieldAttributes и используется для другой цели.См. msdn .

...