当我在 C# 中使用foreach
循环时,如果项目类型是接口类型,则似乎不执行编译时类型检查。
例如
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!
}
为什么当项类型是接口时没有编译时类型检查?
(这发生在 Visual Studio 2008 中的 .NET 3.5 SP1 中)