#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. мне кажется нелогичным, что здесь требуется флаг экземпляра