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