当前位置: 首页 > 编程语言 > C#

为什么foreach会跳过接口类型的编译时类型检查?分享

时间:2023-04-10 14:46:39 C#

为什么foreach会跳过接口类型的编译时类型检查?当我在C#中使用foreach循环时,如果项类型是接口类型,似乎不会执行编译时类型检查。例如classSomeClass{}interfaceSomeInterface{}IEnumerable东西;foreach(SomeInterfaceobjinstuff){//这会编译-为什么!?这将愉快地编译并在编译时清楚地表明这没有意义时在运行时导致异常。如果我将项类型从SomeInterface更改为另一个类,编译时类型检查将恢复:IEnumerablestuff;foreach(Randomobjinstuff){//这不能编译-很好!当项目类型是接口时,为什么没有编译时类型检查?(这发生在VisualStudio2008的.NET3.5SP1中)如果程序的另一部分(可能在不同的项目中)有:classSomeOtherClass:SomeClass,ISomeInterface{publicstaticIEnumerableGetSomeStuff(){for(inti=0;i<10;++i)yieldreturnnewSomeOtherClass(i);}}现在运行时检查是否成功。如果您将SomeClass标记为密封的,那么这是不可能的,并且在编译时将再次知道该转换永远不会起作用。以上是C#学习教程:为什么foreach会跳过接口类型的编译时类型检查?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: