Это поможет объяснить это возможно:
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>
.
Ahhhh и все это имеет смысл сейчас – Micah
Отличное объяснение. – wonde