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

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

IEnumerable<string> strList = new List<string>();
IEnumerable<object> objList = strList;

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

IEnumerable<int> intList = new List<int>();
IEnumerable<object> objList = intList;

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

Variance applies only to reference types; if you specify a value type for a variant type parameter, that type parameter is invariant for the resulting constructed type.

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

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

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

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