1

重複の可能性:
.NET でキャッチできない例外のリスト

文書化されているように、try/catch ブロックは StackOverflowException と OutOfMemoryException を処理できません。

この制限に苦しむ他の例外はありますか?

4

2 に答える 2

2

Jeffrey Richter は、彼の著書 C# による CLR の「Trading Reliability for Productivity」で、このトピックについていくつかの良い点を指摘しています。

ところで、OutOfMemmory をキャッチして処理できます。

うまく説明できない何らかの理由で、.NET Framework のコードを記述する場合、このような細部への注意が払われません。メモリ不足の状況は常に発生する可能性がありますが、OutOfMemoryException から回復するための catch ブロックを含むコードはほとんど見当たりません。実際、一部の開発者から、CLR では OutOfMemoryException をプログラムでキャッチできないと言われたことがあります。記録として、これは絶対に真実ではありません。この例外をキャッチできます。実際、マネージ コードの実行時に発生する可能性のあるエラーは数多くありますが、開発者がこれらの潜在的なエラーから回復しようとするコードを記述することはほとんどありません。

于 2012-10-08T03:47:06.193 に答える
1

直接キャッチできない唯一の例外は、(スローされたフレームワーク) StackOverflowException です。その時点で例外を処理するためのスペースがスタックにないため、これは論理的に理にかなっています。ドキュメントから:

.NET Framework バージョン 2.0 以降では、StackOverflowException オブジェクトを try-catch ブロックでキャッチできず、対応するプロセスが既定で終了します。

ThreadAbortException はキャッチできますが、常に再発生するため、独自の動作をします。ドキュメントから:

ThreadAbortException は、キャッチできる特別な例外ですが、catch ブロックの最後で自動的に再度発生します。

参考:.NETでキャッチできない例外一覧

于 2012-10-08T03:39:14.337 に答える