return
wird die Methode beenden; throw
wird auch verlassen Sie die Methode, vorausgesetzt, es ist nicht innerhalb der try
. Es kann nur einmal verlassen werden!
Also unabhängig von der Reihenfolge - die erste der throw
/return
effektiv die Methode zu beenden.
Als allgemeinere Feedback, aber: wenn es die Absicht, bei einem Fehler zurück falsch ist, alles, was Sie brauchen, ist:
try
{
session.Save(obj);
return true;
}
catch
{
return false;
}
Ich persönlich würde sagen, dass diese schlechten Code - es versteckt sich das eigentliche Problem aus der Aufrufer, so dass es sehr schwer zu debuggen. Es sagt uns nichts von warum es fehlgeschlagen ist. Ich würde sagen, dass der bessere Ansatz ist einfach lassen Sie die Ausnahme Blase. In diesem Fall gibt es keinen Punkt, der true
zurückgibt, weil wir niemals false
zurückgeben würden - und es hat keinen Sinn, eine Ausnahme zu fangen, nur um sie erneut zu werfen. So ist die gesamte Methode wird:
session.Save(obj);
(nichts anderes überhaupt erforderlich)
Wenn Ihre Frage ist: „Warum ist nur eine davon erzeugen eine Warnung“: eine faire Frage, aber der Compiler isn 't erforderlich zu spot entweder von ihnen für Sie. Vielleicht sollte es es erkennen. I verdächtigen, dass gmcs
würde Spot dies und warnen darüber - der Compiler in Mono ist viel mehr bereit, auf Dummheit hinweisen.
Edit: wie erwartet, [g] mcs Ausgänge:
Program.cs(15,13): warning CS0162: Unreachable code detected
Program.cs(28,13): warning CS0162: Unreachable code detected
für den Code unten - so ist es in der Tat sowohl meldet verwendet als Warnung:
class Program
{
static void Main() { }
static void DoSomething() { }
bool ReturnFirst()
{
try
{
DoSomething();
return true;
}
catch
{
return false;
throw; // line 15
}
}
bool ThrowFirst()
{
try
{
DoSomething();
return true;
}
catch
{
throw;
return false; // line 28
}
}
}
„csc101 mir gesagt, diese Return-Anweisungen sollten immer die letzte Aussage in einer Funktion sein. ": Ich rufe dies als überholten Rat von Djikstra aus, der sich auf mehr altmodische Sprachen bezog, die unterschiedliche Ressourcen-Allokations-/Bereinigungsmodelle haben. – spender
ist es C# oder Java? –
C# ... ist Java anders? – sirbombay