Die einzige Ausnahme, die nicht direkt erfasst werden kann, ist (ein Framework ausgelöst) StackOverflowException . Dies ist logisch, da Sie nicht über den Speicherplatz im Stapel verfügen, um die Ausnahme an diesem Punkt zu behandeln. Aus der Dokumentation:
Ab Version 2.0 von .NET Framework kann ein StackOverflowException-Objekt nicht von einem try-catch-Block abgefangen werden und der entsprechende Prozess wird standardmäßig beendet.
ThreadAbortException kann abgefangen werden, wird aber immer wieder ausgelöst, So hat einzigartiges Verhalten. Aus der Dokumentation:
ThreadAbortException ist eine spezielle Ausnahme, die abgefangen werden kann, aber am Ende des catch-Blocks automatisch wieder ausgelöst wird.
Beachten Sie auch, dass einige AccessViolationException
-Instanzen korrupte Statusausnahmen sind und nicht standardmäßig behandelt werden . Diese können behandelt werden, erfordern jedoch eine zusätzliche Handhabung über Attribute. Weitere Informationen finden Sie unter Umgang mit beschädigten Ausnahmezuständen .
NullReferenceException
kann sicherlich gefangen werden. Woher hast du die Idee?
A try {} catch {}
fängt sowohl nicht gemanagte als auch gemanagte Ausnahmen ab (beachten Sie, dass es für die catch
keine Ausnahmeklausel gibt).
Der einzige, der nicht gefangen werden kann, ist StackOverflowException
, und TreadAbortException
wird am Ende des Catch erneut aufgetaut.
Hinweis:
ThreadAbortException ist eine spezielle Ausnahme, die gefangen werden kann, aber es wird am Ende des Catch-Blocks automatisch wieder ausgelöst. Wann Diese Ausnahme wird ausgelöst. Die Laufzeitumgebung führt alle finally-Blöcke aus bevor der Thread beendet wird.
Jede Ausnahme, die aufgrund der Barrierefreiheit nicht nach Typ referenziert werden kann, kann nicht explizit abgefangen werden. Sie kann jedoch mit dem Basiscode Exception
abgefangen werden.
Zum Beispiel wird ein ContractException
im Code Contracts Framework absichtlich zu seiner Assembly internal
gemacht, so dass Sie nicht versuchen können, es explizit abzufangen.
Ich weiß nicht, warum du NullReferenceExceptions
erwähnt hast. NullReferenceExceptions
sind eine der wichtigsten Ausnahmen, die ich erhalte. Der einzige, den ich mir von Kopf bis Fuß denken kann, ist eine Out of Memory-Ausnahme oder StackOverflow
, denn sobald der Speicher voll ist, wird die Ausführung gestoppt und es besteht eine gute Chance, dass die Exception es kann nicht erwischt werden.
SEHException kann in einigen Fällen nicht abgefangen werden. Es kann durch nicht verwalteten Code ausgelöst werden. Ein großer SO-Thread zu diesem Thema erscheint hier: SEHException wird nicht von Try / Catch abgefangen