¿Por qué la covarianza y la contravarianza no admiten el tipo de valor?

IEnumerable<T> esco-variante pero no admite el tipo de valor, solo el tipo de referencia. El siguiente código simple se compila exitosamente:

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

Pero cambiando destring aint obtendrá error compilado:

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

La razón se explica enMSDN:

La variación se aplica solo a los tipos de referencia; Si especifica un tipo de valor para un parámetro de tipo de variante, ese parámetro de tipo es invariante para el tipo construido resultante.

He buscado y encontrado que algunas preguntas mencionan que la razón esboxeo entre tipo de valor y tipo de referencia. Pero todavía no aclara mucho mi mente, ¿por qué el boxeo es la razón?

¿Podría alguien dar una explicación simple y detallada de por qué la covarianza y la contravarianza no son compatibles con el tipo de valor y cómo?boxeo afecta esto?

Respuestas a la pregunta(4)

Su respuesta a la pregunta