Foreach puede lanzar una InvalidCastException?

Imagine el siguiente código:

class foreach_convert
{
    public static void method2()
    {
        List<IComparable> x = new List<IComparable>();
        x.Add(5);

        foreach (string s in x)
        {
            //InvalidCastException in runtime
        }
    }
}

Me pregunto, ¿por qué este comportamiento foreach es tan ... no parecido a C #? Lo que sucede aquí es una conversión implícita a una subclase, que es propensa a errores y parece estar prohibida en cualquier otro lugar del lenguaje. ¿O no tengo razón?

PD. La razón por la que pregunto es que tuve un error en el código similar en mi proyecto, donde solía iterar a través de una Colección personalizada de una biblioteca externa, que se llamaba comoSomeTypeCollection, pero de hecho proporcionó una colección de elementos de tipo base y podría haber contenido elementos deSomeOtherType. Es mi culpa, pero aún así ni el lenguaje ni el compilador proporcionaron ninguna pista / advertencia explícita, lo cual es bastante inusual para C # ...

Respuestas a la pregunta(6)

Su respuesta a la pregunta