C # Отражение, почему в GetFields перечисляются поля, которые я не создал?Как их исключить? - PullRequest
7 голосов
/ 29 января 2011

Этот код возвращает поля, которые я создал, но также и некоторые системные поля (я в приложении WPF), которые я не создал сам:

FieldInfo[] fieldInfos;
fieldInfos = this.GetType().GetFields(BindingFlags.NonPublic | BindingFlags.Instance);

Как исключить системные поля и оставить только мои собственные?

Обновление: эти поля не являются полями, которые я унаследовал от своего собственного класса.

1 Ответ

11 голосов
/ 29 января 2011

Я предполагаю, что вы унаследовали от чего-то другого, кроме object - в этом случае добавьте DeclaredOnly к вашему GetFields вызову:

DeclaredOnly

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

Таким образом, вы получите:

FieldInfo[] fieldInfos = this.GetType().GetFields(
     BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.DeclaredOnly);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...