Cast IList <string> do IList <object> kończy się niepowodzeniem w czasie wykonywania
Mam następujący krótki program C #:
IList<string> listString = new List<String>();
IList<object> listObject;
listObject = listString;
Ten program się nie kompiluje. Ostatnia linia powoduje następujący błąd kompilacji:
Nie można niejawnie przekonwertować typu „System.Collections.Generic.IList” na „System.Collections.Generic.IList”. Istnieje jawna konwersja (czy brakuje Ci rzutu?)
Dodałem obsadę:
listObject = (IList<object>)listString;
Teraz program kompiluje się poprawnie, ale nie działa w czasie wykonywania. NaInvalidCastException
jest wywoływany z następującym komunikatem:
Nie można rzutować obiektu typu „System.Collections.Generic.List'1 [System.String]”, aby wpisać „System.Collections.Generic.IList'1 [System.Object]”.
Albo rzut jest nielegalny i powinien zostać przechwycony przez kompilator, albo jest legalny i nie powinien rzucać wyjątku w czasie wykonywania. Dlaczego niespójne zachowanie?
WYJAŚNIENIE: Nie pytam, dlaczego obsada się nie udaje. Rozumiem, dlaczego takie rzucanie jest problematyczne. Pytam, dlaczego obsada się nie udajetylko w czasie wykonywania.