Как использовать отражение, чтобы получить только открытые свойства экземпляра объекта? - PullRequest
0 голосов
/ 24 августа 2010

Я размышляю над объектом и хочу только публичные свойства экземпляра, я не хочу публичных статических свойств. Проблема в том, что GetProperties() возвращает как статические, так и открытые свойства экземпляра. У кого-нибудь есть идеи, как лучше всего подойти к этой проблеме?

private IOrderedEnumerable<PropertyInfo> GetSortedPropInfos()
{
    return dataExtractor.GetType().GetProperties().OrderBy(
            p => p.Name );
}

Обратите внимание, я сортирую список, так как GetProperties() не указывает какой-либо тип заказа, и для меня важен порядок.

Ответы [ 4 ]

1 голос
/ 24 августа 2010
private IOrderedEnumerable<PropertyInfo> GetSortedPropInfos()
{
    return dataExtractor.GetType()
                        .GetProperties(BindingFlags.Instance | BindingFlags.Public)
                        .OrderBy( p => p.Name );
}
1 голос
/ 24 августа 2010

Используйте другую перегрузку GetProperties , которая позволяет указывать флаги привязки , такие как BindingFlags.Instance.

return dataExtractor.GetType().GetProperties(
        BindingFlags.Instance | BindingFlags.Public).OrderBy(
        p => p.Name );
0 голосов
/ 29 мая 2015

Просто укажите дополнение к другим ответам - также используйте BindingFlags.DeclaredOnly, если вы не хотите наследовать свойства.

0 голосов
/ 24 августа 2010

Да, вам нужно установить флаги привязки в конструкторе.Флаги привязки определяют флаги, которые управляют привязкой и тем, как поиск членов и типов осуществляется отражением.Для получения дополнительной информации взгляните на следующее:

Перечисление BindingFlags: http://msdn.microsoft.com/en-us/library/system.reflection.bindingflags.aspx

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