Это поможет объяснить это, может быть:
List<string> lstString = new List<string>();
List<int> lstInt = new List<int>();
if (lstString.GetType().GetGenericTypeDefinition() ==
lstInt.GetType().GetGenericTypeDefinition())
{
Console.WriteLine("Same type definition.");
}
if (lstString.GetType() == lstInt.GetType())
{
Console.WriteLine("Same type.");
}
Если вы запустите его, вы пройдете первый тест, потому что оба элемента реализуют тип List<T>
. Второй тест не пройден, потому что List<string>
отличается от List<int>
. Определение универсального типа сравнивает исходный универсальный до определения T
.
Тип IsGenericType
просто проверяет, был ли определен общий T
. IsGenericTypeDefinition
проверяет, что общий T
НЕ был определен. Это полезно, если вы хотите знать, были ли определены два объекта из одного базового универсального типа, такого как первый пример List<T>
.