Преобразование IList <string> в IList <object> не выполняется во время выполнения
У меня есть следующая короткая программа на C #:
IList<string> listString = new List<String>();
IList<object> listObject;
listObject = listString;
Эта программа не компилируется. Последняя строка вызывает следующую ошибку компиляции:
Не удается неявно преобразовать тип «System.Collections.Generic.IList» в «System.Collections.Generic.IList». Существует явное преобразование (вам не хватает приведения?)
Итак, я добавил актерский состав:
listObject = (IList<object>)listString;
Теперь программа правильно компилируется, но завершается с ошибкой во время выполнения.InvalidCastException
поднимается со следующим сообщением:
Невозможно привести объект типа «System.Collections.Generic.List'1 [System.String]» к типу «System.Collections.Generic.IList'1 [System.Object] '.
Либо приведение является недопустимым и должно быть перехвачено компилятором, либо оно допустимо и не должно вызывать исключение во время выполнения. Почему противоречивое поведение?
РАЗЪЯСНЕНИЕ: Я не спрашиваю, почему приведение не удается. Я понимаю, почему такое литье проблематично. Я спрашиваю, почему бросок не удалсятолько во время выполнения.