Cast IList <string> para IList <object> falha no tempo de execução

Eu tenho o seguinte programa C # curto:

IList<string> listString = new List<String>();
IList<object> listObject;

listObject = listString;

Este programa não compila. A última linha causa o seguinte erro de compilação:

Não é possível converter implicitamente o tipo 'System.Collections.Generic.IList' para 'System.Collections.Generic.IList'. Existe uma conversão explícita (você está perdendo um elenco?)

Então, eu adicionei o elenco:

listObject = (IList<object>)listString;

Agora o programa compila corretamente, mas falha no tempo de execução. AInvalidCastException é gerado com a seguinte mensagem:

Não é possível converter o objeto do tipo 'System.Collections.Generic.List'1 [System.String]' para digitar 'System.Collections.Generic.IList'1 [System.Object]'.

O elenco é ilegal e deve ser detectado pelo compilador, ou é legal e não deve lançar uma exceção em tempo de execução. Por que o comportamento inconsistente?

ESCLARECIMENTO: Eu não estou perguntando por que o elenco falha. Eu entendo porque esse elenco é problemático. Eu estou perguntando por que o elenco falhasomente em tempo de execução.

questionAnswers(5)

yourAnswerToTheQuestion