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 # ...

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

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