Получить универсальный тип контейнера - PullRequest
0 голосов
/ 15 августа 2011

Мне нужно выяснить, является ли Type, с которым я работаю, универсальным «контейнером», например, если у меня есть List<int>, мне нужно проверить, работаю ли я со списком (я знаю, какчтобы узнать, работаю ли я с int), как мне это сделать?(Я думаю, отражение)Другой пример, у меня есть класс с именем StructContainer<T>, мне нужно найти слово (имя) 'StructContainer', меня не слишком беспокоит, что такое 'T', используя отражение, которое я получаю StructContainer'1, я бы не хотел иметьсделать некоторые разбиения строк и т.д. / РЕДАКТИРОВАТЬ: просто чтобы объяснить, StructContainer<int> мне нужен StructContainer, Tuple<int> мне нужен Tuple, List<int> мне нужен список и т. д.

Ответы [ 2 ]

4 голосов
/ 15 августа 2011

Ваш первый вопрос может быть получен несколькими способами:

  1. Проверьте, реализует ли ваш объект IEnumerable<T>: yourObject is IEnumerable<int>.Это работает, только если вы знаете тип объекта в контейнере (int в данном случае)
  2. Используйте то же решение, которое я описал ниже, просто измените StructContainer на List.

Что касается вашего второго вопроса, вы можете сделать это:

var yourObject = new StructContainer<int>();
var yourType = yourObject.GetType();
if(yourType.IsGenericType &&
   yourType.GetGenericTypeDefinition() == typeof(StructContainer<>))
    // ...
0 голосов
/ 15 августа 2011
string type = yourObject.GetType().Name.Split('`')[0];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...