Wie funktioniert das Schlüsselwort "is"?

8

Genauer gesagt, warum funktioniert das?

%Vor%

aber das nicht?

%Vor%

Im letzteren Fall bekomme ich eine Compiler-Warnung, die sagt:

  

Der angegebene Ausdruck ist niemals vom angegebenen Typ.

Ich kann das verstehen, denn changeRow ist ein ChangeSetEntry nicht ein RouteStage , also warum funktioniert es innerhalb des foreach Blocks?

Dies ist in meiner Überschreibung der Submit Methode in einem RIA Services DomainService. RouteStage ist eine Entität, die von DomainService zurückgegeben wurde.

    
john_cat 02.01.2014, 16:20
quelle

3 Antworten

0

Die Zeile sollte lauten:

%Vor%

... dann kompiliert es sauber. Einer dieser Fälle von "kann nicht zum Schauen sehen". TFS hat hervorgehoben, was ich versehentlich geändert habe.

    
john_cat 02.01.2014, 17:31
quelle
1

Ich habe Ihre Codebeispiele (genau die gleichen Bedingungen, die Sie beschrieben haben, in der Submit überschreiben eines RIA-Domänendienstes) getestet, beide erzeugen eine Warnung.

Es wird tatsächlich erwartet: In beiden Fällen haben Sie changeRow , das als ChangeSetEntry Variable deklariert ist. Ob es in einer foreach Schleife ist oder nicht, ändert daran nichts. Und da RouteStage nicht von ChangeSetEntry erbt (was versiegelt ist), sollte die Warnung immer angezeigt werden.

Entweder haben Sie Ihr Beispiel zu stark vereinfacht (und etwas fehlt), oder, wie Jon Skeet vermutete, der RouteStage -Typ in beiden Codefragmenten bezieht sich nicht auf den gleichen Typ (prüfen Sie, ob Sie using RouteStage = ChangeSetEntry; irgendwo haben in deiner Klasse).

    
ken2k 02.01.2014 17:08
quelle
-1
  

Ich kann das verstehen, da changeRow ein ChangeSetEntry nicht ist   RouteStage, also warum funktioniert es innerhalb des Foreach-Blocks?

Ich glaube nicht, dass es funktioniert in foreach loop. Der einzige Unterschied scheint zu sein, dass der Compiler die Variablen innerhalb der Schleife nicht statisch überprüft. Daher wird keine Warnung angezeigt. Aber ich nehme an, dass die Ausführung niemals if in der foreach -Schleife übergibt, weil die Bedingung immer falsch ist.

Ein Ausweg daraus ist, die if-Anweisung in beiden Formen zu entfernen, weil es im Voraus bekannt ist, niemals wahr zu sein.

    
Zoran Horvat 02.01.2014 16:37
quelle

Tags und Links