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.
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).
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.
Tags und Links c# wcf-ria-services