當我在C#中使用foreach
循環時,如果項類型是接口類型,則看起來沒有執行編譯時類型檢查。爲什麼foreach跳過對接口類型的編譯時類型檢查?
E.g.
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 .NET 2008 3.5 SP1)
是的,我想知道(而且被咬了)同樣的事情。期待知道者的答案! – Eyvind 2010-08-02 15:44:28