Frage

Ich erhalte seltsame Ergebnisse, um den Rückgabewert aus einer Funktion zu testen. Dieser Code befindet sich in A for Loop:

DialogResult result = EvalReturnFromWS(returnMsg);
     switch (result)
     {
         case DialogResult.Yes:
         case DialogResult.No:
              continue;
         default:
              break;
     } 

Hier ist ein Snippet aus der aufgerufenen Funktion (in meinem Unit -Test klicke ich immer auf die Schaltfläche "Ja"):

DialogResult result = MessageBox.Show(mbText.ToString(), caption, button, icon);
switch (result)
    {
         case DialogResult.Yes:
              return DialogResult.Yes;
         case DialogResult.No:
              return DialogResult.No;
         case DialogResult.Cancel:
              return DialogResult.Cancel;
    }

Wenn ich auf "Ja" klicke, gibt es dialogesult.yes zurück, aber wieder im Anrufcode fließt die Ausführung in den 2. Fall, der "Nein" ist, und dies wird fortgesetzt, was ich nicht beabsichtige.

An anderer Stelle auf Stackoverflow habe ich einen Thread gesehen, der vorschlug, einen "Herbst"-Fall wie für Dialogresult zu codieren. Ja würde dienen, durchzufallen.

Kurz gesagt, wenn ja, möchte ich die Ausführung mit der nächsten Anweisung nach dem Ende der Switch -Fall (en) fortsetzen. Das heißt, "fallen".

Bearbeiten - Entschuldigung für Verwirrung. Ja, der obere Snippet befindet sich in einer für die Schleife. Der 2. Snippet befindet sich in der aufgerufenen Funktion (dieser Code problemum von MessageBox.show).

War es hilfreich?

Lösung

Was Sie tun möchten, ist einzulegen break; in dem DialogResult.Yes Fall. Sie möchten nicht, dass es in diesem Fall durchläuft.

 switch (result)
 {
     case DialogResult.Yes:
          break; //Leaves the switch statement and continues executing code
     case DialogResult.No:
          continue; //Moves to next iteration of loop
     default:
          break; //Leaves the switch statement and continues executing code
 }

Fallen durch bedeutet, dass die Ausführung von einem bewegt wird case Aussage zum nächsten. Es hat nichts mit der Ausführung zu tun, die das verlässt switch Aussage. In Ihrem Beispiel die break; unter default:, bricht aus diesem Codeblock (dem Switch, nicht der Schleife) aus und setzt die Ausführung nach dem fort switch Aussage. Auch hier bricht es nicht aus der äußeren Schleife aus. Das ist weil break; ist ein Schlüsselwort innerhalb von Switch -Fällen, das die weitere Ausführung des Switch -Fallblocks stoppt. Jedoch, continue; Wird die Schleife fortsetzen, da sie in einem Switch -Fall nicht verwendet wird.

Versuchen Sie, diesen Beispielcode auszuführen:

for (int i = 0; i < 3; i++) {
    switch (i) {
        case 0:
        case 2:
            continue;
        default:
            break;
    }
    Console.Out.WriteLine(i);
}

Es wird nur ausgegeben 1 Weil für die Fälle i=0 und i=2, Die Schleife wird fortgesetzt. Für Fall i=1 Ausführung schafft es zu Console.Out.WriteLine(i);.

Bearbeiten
Und wenn Sie in Ihrem Switch aus der Schleife ausbrechen möchten, sehen Sie sich diese Frage an: Aus einer verschachtelten Schleife ausbrechen

Andere Tipps

Ist das in einer Schleife? Dies ist der einzige Grund, warum ich sehen kann, dass Sie "Weiter" nach Nein. Sicher genug verwenden, indem Sie die Falloptionen auf diese Weise gestapelt. Ja und Nein, nein, wird dasselbe tun. Wenn Sie nach dem Switch nur "Ja" zum "fallen" wollen

case DialogResult.Yes:
    break;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top