Преобразование 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]».
Либо приведение является недопустимым и должно быть перехвачено компилятором, либо оно допустимо и не должноисключение во время выполнения. Почему противоречивое поведение?
РАЗЪЯСНЕНИЕ: Я не спрашиваю, почему приведение не удается. Я понимаю, почему такое литье проблематично. Я спрашиваю, почему бросок не удалсятолько во время выполнения.