Почему ковариация и контравариантность не поддерживают тип значения

IEnumerable являетсясо-вариант но он не поддерживает тип значения, только ссылочный тип. Приведенный ниже простой код успешно скомпилирован:

IEnumerable strList = new List();
IEnumerable objList = strList;

Но меняется отstring вint получит скомпилированную ошибку:

IEnumerable intList = new List();
IEnumerable objList = intList;

Причина объясняется вMSDN:

Дисперсия применяется только к ссылочным типам; если вы указываете тип значения для параметра типа варианта, этот параметр типа является инвариантным для результирующего составного типа.

Я искал и обнаружил, что в некоторых вопросах упоминается причинабокс между типом значения и ссылочным типом, Но это все еще не проясняет мой разум, почему бокс является причиной?

Может ли кто-нибудь дать простое и подробное объяснение, почему ковариация и контравариантность не поддерживают тип значения и какзаниматься боксом влияет на это?

Ответы на вопрос(4)

Ваш ответ на вопрос