Следующий код дает вам ошибку компилятора, как и следовало ожидать:
List<Banana> aBunchOfBananas = new List<Banana>();
Banana justOneBanana = (Banana)aBunchOfBananas;
Однако при использовании IEnumerable<Banana>
вы просто получаете ошибку времени выполнения.
IEnumerable<Banana> aBunchOfBananas = new List<Banana>();
Banana justOneBanana = (Banana)aBunchOfBananas;
Почему компилятор С# разрешает это?