C# Метод отражения GetProperties (BindingFlags.Instance) не возвращает объекты дочернего класса. - PullRequest
0 голосов
/ 24 марта 2020

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

   public class Dog
    {
    public int Id {get;set;}
    public int Name {get;set;}
    public Breed Breed {get;set;}
    }

var dog = new Dog (); var children = dog.GetType (). GetProperties (BindingFlags.Instance);

Почему массив children не содержит свойство breed?

1 Ответ

2 голосов
/ 24 марта 2020

Предоставляя только BindingFlags.Instance, вы вообще не можете получить никаких свойств, поскольку вы не отправляете предикат модификатора доступа.

В соответствии с вашими потребностями, объедините эти флаги с побитовым оператором ИЛИ |

Документацию можно найти здесь: https://docs.microsoft.com/en-us/dotnet/api/system.reflection.bindingflags?view=netframework-4.8

var children = dog.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);

РЕДАКТИРОВАТЬ:

К сожалению, перечисление не имеет никакого значения для фильтрация свойств в соответствии с их типами значений. Чтобы сделать это полным ответом, фильтрация в массив, содержащий только свойство Breed, предоставлена ​​@ const-phi:

var result = children.Where(c => c.PropertyType.IsClass).ToArray(); // Const Phi 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...