Foreach может выдать InvalidCastException?
Представьте себе следующий код:
class foreach_convert
{
public static void method2()
{
List<IComparable> x = new List<IComparable>();
x.Add(5);
foreach (string s in x)
{
//InvalidCastException in runtime
}
}
}
Интересно, почему это поведение foreach так ... не похоже на C #? Здесь происходит неявное приведение к подклассу, которое подвержено ошибкам и, по-видимому, запрещено в любом другом месте языка. Или я не прав?
Постскриптум Причина, по которой я спрашиваю, состоит в том, что у меня была ошибка в похожем коде в моем проекте, где я использовал для перебора пользовательской коллекции из внешней библиотеки, которая называлась какSomeTypeCollection
, но на самом деле предоставил набор элементов базового типа и мог содержать элементыSomeOtherType
, Я виноват, но все же ни язык, ни компилятор не предоставили никаких явных подсказок / предупреждений, что довольно необычно для C # ...