【发布时间】:2010-08-02 15:42:43
【问题描述】:
当我在 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 中)
【问题讨论】:
-
是的,我想知道(并且被咬过)同样的事情。期待知情人士的解答!
标签: c# visual-studio-2008 foreach static-typing