Непонятный результат «GetElementType» для массивов и общих списков - PullRequest
7 голосов
/ 06 февраля 2011

Общий список:

var elementType1 = typeof (List<A>).GetElementType();

Массив:

var elementType = typeof (A[]).GetElementType();

Почему я получаю только тип элемента массива?Как я могу получить тип элемента общего списка?(примечание: общий список в штучной упаковке)

Ответы [ 2 ]

13 голосов
/ 06 февраля 2011

GetElementType получает только тип элемента для массива, указателя и ссылочных типов.

При переопределении в производном классе, возвращает тип объекта охвачены или упомянуты текущий массив, указатель или ссылка тип

API отражения не «знает», что List<T> является общим контейнером и что аргумент типа одного из его созданных типов представляет тип элементов, которые он содержит.

Вместо этого используйте метод GetGenericArguments, чтобы получить аргументы типа составного типа:

var elementType1 = typeof(List<A>).GetGenericArguments().Single();
4 голосов
/ 06 февраля 2011
var elementType1 = typeof(List<A>).GetGenericArguments()[0]; 
var elementType = typeof(int[]).GetElementType();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...