Warum lässt der Compiler das rutschen? [Duplikat]

8

Betrachten Sie den folgenden Codeblock

%Vor%

Beachten Sie die Umwandlung von Base zu DerivedLeft in foreach-Anweisung. Dies kompiliert Fein (Visual Studio 2010), ohne Fehler oder gar Warnung. Offensichtlich erhalten wir bei der zweiten Schleifeniteration eine InvalidCastException. Wenn man mir eine Frage über die Reaktion des Compilers auf einen solchen Code stellen würde, würde ich ohne Zweifel sagen, dass der Compiler dies nicht unbemerkt lassen und zumindest eine Warnung erzeugen wird. Aber anscheinend nicht. Also, warum lässt der Compiler das durch?

    
Trogvar 10.11.2011, 14:59
quelle

3 Antworten

5

Es macht eine implizite Besetzung. Lesen Sie diesen Beitrag zum selben Thema für eine hervorragende Erklärung von Jon Skeet:

Foreach kann eine InvalidCastException auslösen

    
JohnD 10.11.2011, 15:02
quelle
2

Weil die Liste vom Typ List<Base> ist und die Variable dl in der foreach-Schleife vom Typ DerivedLeft ist, die Base als Basisklasse hat. Also kann während der Laufzeit arbeiten, aber muss nicht haben. Der Compiler überprüft nicht die Initialisierung Ihrer Liste.

    
Fischermaen 10.11.2011 15:03
quelle
0

Wenn erwartet wird, dass der Compiler einen Fehler verursacht, ist das so, als erwarte er, dass er einen Fehler verursacht:

%Vor%     
nogola 10.11.2011 15:07
quelle

Tags und Links