Преобразование IList <string> в IList <object> не выполняется во время выполнения

У меня есть следующая короткая программа на C #:

IList listString = new List();
IList listObject;

listObject = listString;

Эта программа нет компилировать. Последняя строка вызывает следующую ошибку компиляции:

Не могу неявно преобразовать типSystem.Collections.Generic.IList» кSystem.Collections.Generic.IList», Существует явное преобразование (вам не хватает приведения?)

Так что я'мы добавили актерский состав:

listObject = (IList)listString;

Теперь программа правильно компилируется, но завершается с ошибкой во время выполнения.InvalidCastException поднимается со следующим сообщением:

Невозможно привести объект типа 'System.Collections.Generic.List»1 [System.String] печатать 'System.Collections.Generic.IList»1 [System.Object]».

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

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

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

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