Gdy używam pętli foreach
w języku C#, wydaje się, że nie jest wykonywane sprawdzanie typu czasu kompilacji, jeśli typ elementu jest typem interfejsu.Dlaczego foreach pomija czas kompilacji sprawdzania typów interfejsów?
E.g.
class SomeClass {}
interface SomeInterface {}
IEnumerable<SomeClass> stuff;
foreach(SomeInterface obj in stuff) { // This compiles - why!?
}
to chętnie skompilować i spowodować wyjątek w czasie wykonywania, gdy jest jasne, w czasie kompilacji to nie ma sensu. Jeśli zmienić typ elementu z SomeInterface
do innej klasy, a następnie kompilacji typu sprawdziany przywrócone:
IEnumerable<SomeClass> stuff;
foreach(Random obj in stuff) { // This doesn't compile - good!
}
Dlaczego nie ma kompilacji typu kontroli czasu, gdy typ elementu jest interfejs?
(Dzieje się tak z .NET 3.5 SP1 w Visual Studio 2008)
Tak, zastanawiałem się (i zostałem ukąszony) w tej samej rzeczy. Czekamy na odpowiedzi od tych, którzy wiedzą! – Eyvind