Direkt von MSDN - Exception Handling:
Betrachten bestimmte Ausnahmen zu kontrollieren, wenn Sie verstehen, warum es in einem bestimmten Kontext geworfen werden.
Sie sollten nur die Ausnahmen abfangen, von denen Sie wiederherstellen können. Zum Beispiel kann eine FileNotFoundException
, die aus einem Versuch resultiert, eine nicht existierende Datei zu öffnen, von einer Anwendung gehandhabt werden, weil sie das Problem an den Benutzer kommunizieren kann und es dem Benutzer erlaubt, einen anderen Dateinamen zu spezifizieren oder die Datei zu erstellen. Eine Anforderung zum Öffnen einer Datei, die eine ExecutionEngineException
generiert, sollte nicht behandelt werden, da die zugrunde liegende Ursache der Ausnahme nicht mit einiger Sicherheit bekannt sein kann, und die Anwendung kann nicht sicherstellen, dass es sicher ist, die Ausführung fortzusetzen.
Sie nicht zu viele catch
, als eine weitere Ausnahme von innerhalb eines catch-Block zu werfen den Stack-Trace zurückgesetzt und bewirken, dass die wichtige Debug-Informationen verloren, als erneut MSDN schlägt vor:
nicht zu viele tun Fang. Ausnahmen sollten häufig erlaubt werden, sich auf dem Aufrufstapel fortzupflanzen.
Abfangen von Ausnahmen, die Sie nicht legitim behandeln können, verbirgt kritische Debugging-Informationen.
Am Ende eine Ausnahme Fang für den Umgang mit bestimmten Ausnahmen sein sollte, dass Sie unter bestimmten gängiges Szenario auftreten erwarten, wo Sie sich anmelden möchten, oder um ein spezielles Verhalten auf Ausnahme fangen zu haben, sonst einfach throw
es, weg wie Eric Lippert
selbst empfiehlt auf seinem Blog (siehe Too much reuse
Artikel).
try {
...
} catch (Exception ex) {
throw; // This does not reset the stack trace.
}
Statt:
try {
...
} catch (Exception ex) {
throw ex; // This does reset the stack trace.
}
Schließlich ist ein Exception
nicht zwingend notwendig, einige Besonderheiten als ergänzende Eigenschaften oder Methoden oder überhaupt anbieten zu können, ist es der Name es, die für sich selbst spricht aus, so dass Sie filtern Ihren Fang nach einer bestimmten Art von Ausnahme.
EDIT # 1
Ein weiterer interessanter Link über Fehler auf Blog Eric Lippert Handhabung: Vexing exceptions.
Da Sie bestimmte Ausnahmen abfangen können, können Sie mehrere catch-Anweisungen in einem try ... catch-Block haben. – Nate
"Haben Standardunterklassen, die von der Basis-Exception-Klasse erben, jemals unterschiedliche Methoden als die Basis?": Ja, aber die meisten Antworten haben sich nicht auf diesen Punkt konzentriert. Ein einfaches Beispiel hierfür finden Sie unter WebException: http://msdn.microsoft.com/en-us/library/system.net.webexception.aspx. Beachten Sie insbesondere die Eigenschaft "Response". – Brian