Я хотел бы выполнить тест, если объект имеет общий тип. Я попробовал следующее без успеха:
public bool Test()
{
List<int> list = new List<int>();
return list.GetType() == typeof(List<>);
}
Что я делаю не так и как мне выполнить этот тест?
Я предполагаю, что вы не просто хотите знать, является ли тип универсальным, но является ли объект экземпляром определенного универсального типа, не зная аргументов типа.
К сожалению, не все так просто. Это не так уж плохо, если универсальный тип является классом (как в данном случае), но это сложнее для интерфейсов. Вот код для класса:
РЕДАКТИРОВАТЬ: Как отмечено в комментариях, это может работать для интерфейсов:
У меня есть подлое подозрение, что вокруг этого могут быть какие-то неуклюжие крайние случаи, но я не могу найти тот, в котором сейчас ничего не получится.
источник
List<T>
в ту или иную форму. Если вы включите интерфейсы, это действительно сложно.IsInstanceOfGenericType
вызовомIsAssignableFrom
вместо оператора равенства (==
)?Вы можете использовать более короткий код, используя динамический алгоритм, хотя это может быть медленнее, чем чистое отражение:
источник
Это два моих любимых метода расширения, которые охватывают большинство крайних случаев проверки универсального типа:
Работает с:
Имеет перегрузку, которая будет «выходить» из определенного универсального типа, если он возвращает true (см. Пример для модульного теста):
Вот тест для демонстрации (основной) функциональности:
источник
источник