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.