Ist es möglich, Pause/return-Methode, die Ausführung aus einer anderen Methode?
Ich habe so etwas wie dieses:
void MethodToBreak()
{
//do something
if(something)
{
MethodThatBreaks();
return;
}
//do something
}
void MethodThatBreaks()
{
//do something
}
So, ich Frage mich: ist es möglich, zu brechen Ausführung von: MethodThatBreaks()
? Dann hätte ich: if(something) MethodThatBreaks();
und wenn der Zustand im inneren if
ist wahr, nichts nach dieser Zeile ausgeführt werden würde.
HINWEIS: ich weiß, es ist möglich, mit else
in diesem Fall, aber ich möchte das nicht.
- Meinst du statt der
return
Sie derzeit haben? - Ja, das ist genau das, was ich meine 🙂
- Nein nicht wirklich dann, ich meine, Sie könnte eine exception werfen, oder wenn Sie hatte Rückgabetypen dann
return MethodThatBreaks()
auf einer Linie, aber weder von denen sind geeignete Lösungen, was Sie haben, ist der beste Weg IMO. - Warum nicht strukturieren Sie Ihre Methode, um dieses Verhalten?
MethodThatBreaks()
ist eine Methode, die verwendet die callback-Kommunikation eine Warnung zurück zu den WCF-client. Eine Warnung würde bedeuten, dass die aufgerufene Methode konnte nicht ausgeführt (daher die Pause/return), aber zur gleichen Zeit, die aufgerufene Methode ist nicht kritisch, es zurück zu werfen eine exception an den client. AuchMethodToBreak()
bleiben void(IsOneWay=true)
, denn auch wenn es nicht entscheidend ist, neigt es dazu führen für ein paar Minuten.- Sie verwenden sollten, sonst, es ist Teil der Sprache: verwenden Sie es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wäre es ein Alptraum zu pflegen, wenn Sie waren zu aufgeregt Ausführung einer Methode aus einer anderen. Versuchen Sie herauszufinden, warum Ihre Ablaufsteuerung ist alle über dem Platz, sechs Monate auf der ganzen Linie, oder für einen anderen Entwickler, wäre Aneurysma induziert.
Es ist nichts falsch mit dem, was Sie bereits tut es, aber ich persönlich würde die Verwendung einer
else
. Gibt es einen bestimmten Grund, warum Sie nicht verwenden möchtenelse
? Wenn es ist, dass der restliche code ist zu lang, dass ist vielleicht und Anzeige sollten Sie umgestalten.while(something) if(something else) MethodThatBreaks()
MethodThatBreaks()
ich möchte zu brechen, unabhängig davon, welche Methode es aufgerufen wurde. Eine Sache, die ich vergaß zu erwähnen (und wichtig) ist, dass ALLE Methoden aufrufenMethodThatBreaks()
sind nichtig.Auslösen einer Ausnahme in
MethodThatBreaks
ist eine Möglichkeit. Also in dem client von derMethodToBreak
Sie setzen try catch block.MethodThatBreaks()
zum kommunizieren verwendet wird, eine Warnung, und Sie sollten nicht beenden Sie die aktuelle Sitzung, sondern beendet die Ausführung der Methode.Diese kann getan werden durch:
deklarieren Sie Globale Variablen