Получить значение из общего свойства объекта по отражению - PullRequest
0 голосов
/ 14 мая 2011

Я просто хочу получить основной идентификатор для всех доменных объектов из общего свойства.
Код до сих пор:

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]

edit
Тип?является типом свойства 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() : "";

Ответы [ 2 ]

1 голос
/ 14 мая 2011

это будет экземпляр вашего объекта

string value = element.GetValue(justAuditElementProperties.GetValue(genericObject, null), null).ToString();
0 голосов
/ 14 мая 2011

Должно быть вашим genericObject.

Насколько я могу скомпилировать в уме, вы перебираете только свойства genericObject. Определение свойств, имеющих AuditeAttribute, а затем получение его значения.

См. MSDN для получения полной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...