Когда я использую 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),