Scrollen Sie immer noch nach unten? Bitte schön!
Diese Frage hat mir vor einiger Zeit eine schwere Zeit bereitet.
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
Was würde im obigen Szenario gedruckt? Ja hat es richtig erraten:
ex.Message - was auch immer es ist (wahrscheinlich versuchte Division durch Null)
Schließlich blockieren
Nach endlich
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block");
}
console.writeline("After finally");
Was würde dieser Druck? Nichts! Es wird ein Fehler ausgegeben, da der catch-Block einen Fehler ausgelöst hat.
In einer guten Programmierstruktur würden Ihre Ausnahmen in dem Sinne weitergeleitet, dass dieser Code von einer anderen Ebene verarbeitet wird. Um einen solchen Fall zu stimulieren, versuche ich diesen Code.
try
{
try
{
int a=1;
int b=0;
int c=a/b;
}
catch(Exception ex)
{
throw(ex);
}
finally
{
console.writeline("Finally block")
}
console.writeline("After finally");
}
catch(Exception ex)
{
console.writeline(ex.Message);
}
In diesem Fall wäre die Ausgabe:
- Schließlich blockieren
- ex.Message - was auch immer es ist.
Es ist klar, dass der Code nach dem Auslösen nicht ausgeführt wird, wenn Sie eine Ausnahme abfangen und erneut in andere Ebenen werfen (Trichter). Es verhält sich ähnlich wie eine Rückgabe innerhalb einer Funktion.
Sie wissen jetzt, warum Sie Ihre Ressourcen nicht nach dem catch-Block für Codes schließen müssen. Platzieren Sie sie im finally-Block.