Как проверить, является ли тип отраженного поля указанным типом или наследуется от него? - PullRequest
3 голосов
/ 23 декабря 2011

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

Особая проблема заключается в том, что я хочу знать все поля, полученные из SortedList. Таким образом, они не совсем SortedList, но каждый из них SortedList. Учитывая, как в поле FieldInfo, как мне это проверить?

Ответы [ 4 ]

9 голосов
/ 23 декабря 2011

Вы можете использовать IsAssignableFrom метод для выполнения этого теста, например:

var isSortedList = typeof(SortedList).IsAssignableFrom(fieldInfo.FieldType);
0 голосов
/ 23 декабря 2011

Вместо того, чтобы искать SortedList как тип, вы также можете искать интерфейсы, такие как IDictionary, ICollection, из которых SortedList происходит Я представляю интересное чтение в своем блоге, в котором приведен пример отражения для интерфейса:

Отражение интерфейса от неизвестной сборки в C #

HTH (от HR к югу от вас ;-))

0 голосов
/ 23 декабря 2011
if ((fieldInfo.FieldType == typeof(SortedList)) || fieldInfo.FieldType.IsSubclassOf(typeof(SortedList))
    Console.WriteLine("Field {0} is of type {1}", fieldInfo.Name, typeof(blah.Name));

Этот код не проверен, но он примерно такой, какой я использовал раньше.

0 голосов
/ 23 декабря 2011
bool canCast = (fieldInfo.FieldType == typeof(SortedList) ||
               (fieldInfo.FieldType.IsSubclassOf(typeof(SortedList)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...