Получение ненаследуемых свойств

#c# #reflection

#c# #отражение

Вопрос:

Я пытаюсь прочитать все свойства данного объекта, читая только те, которые объявлены в типе объекта, исключая те, которые наследуются. IE:

 class Parent {
   public string A { get; set; }
}

class Child : Parent {
   public string B { get; set; }
}
  

И поэтому я хочу вернуть только B. Читая документы, я предположил, что приведенное ниже — это то, что мне было нужно, но на самом деле это вообще ничего не вернуло.

 var names = InstanceOfChild.GetType().GetProperties(BindingFlags.DeclaredOnly).Select(pi => pi.Name).ToList();
  

Комментарии:

1. спасибо за этот вопрос, я просто ломал голову над этим

Ответ №1:

Просто нужна пара других флагов привязки

 var names = InstanceOfChild.GetType().GetProperties(
   BindingFlags.DeclaredOnly |
   BindingFlags.Public |  
   BindingFlags.Instance).Select(pi => pi.Name).ToList();
  

Ответ №2:

Попробуйте это:

 var names = InstanceOfChild.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly).Select(pi => pi.Name).ToList();
  

Я добавил BindingFlags.Instance и BindingFlags.Public к параметрам поиска, которые согласно документации MSDN соответственно:

Указывает, что члены экземпляра должны быть включены в поиск.

и

Указывает, что общедоступные элементы должны быть включены в поиск.

Комментарии:

1. мне кажется нелогичным, что здесь требуется флаг экземпляра