Представьте следующий код:
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 так... не похоже на С#? Что происходит здесь, это неявный приведение к подклассу, который подвержен ошибкам и, кажется, запрещен в любом другом месте на этом языке. Или я не прав?
P.S. Причина, по которой я спрашиваю, заключается в том, что у меня была ошибка в аналогичном коде в моем проекте, где я использовал для итерации через пользовательскую коллекцию из внешней библиотеки, которая называлась как SomeTypeCollection
, но на самом деле предоставлялась коллекция базовых и могли содержать элементы SomeOtherType
. Моя ошибка, но все же ни язык, ни компилятор не предоставили никаких явных подсказок/предупреждений, что довольно необычно для С#...