Преобразование 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] '.

Либо приведение является недопустимым и должно быть перехвачено компилятором, либо оно допустимо и не должно вызывать исключение во время выполнения. Почему противоречивое поведение?

РАЗЪЯСНЕНИЕ: Я не спрашиваю, почему приведение не удается. Я понимаю, почему такое литье проблематично. Я спрашиваю, почему бросок не удалсятолько во время выполнения.

Ответы на вопрос(5)

Ваш ответ на вопрос