Почему foreach пропускает тип времени компиляции начинающие работу интерфейсные типы?

Когда я использую a foreach цикл в C#, кажется, что никакая проверка типа времени компиляции не выполняется, если тип изделия является интерфейсным типом.

Например.

class SomeClass {}
interface SomeInterface {}

IEnumerable<SomeClass> stuff;
foreach(SomeInterface obj in stuff) { // This compiles - why!?
}

Это счастливо скомпилирует и вызовет исключение во времени выполнения, когда это будет ясно во время компиляции, что это не имеет никакого смысла. Если я изменяю тип изделия от SomeInterface к другому классу затем восстанавливается проверка типа времени компиляции:

IEnumerable<SomeClass> stuff;
foreach(Random obj in stuff) { // This doesn't compile - good!
}

Почему не там никакие проверки типа времени компиляции, когда тип изделия является интерфейсом?

(Это происходит с.NET 3,5 SP1 в Visual Studio 2008),

6
задан dlras2 2 August 2010 в 15:44
поделиться