-3

したがって、この質問finallyから、例外が発生した場合でも、例外がキャッチされずに伝播が許可された場合でも、ブロックを使用してコードを実行できることがわかりました。

この質問から、C# では、throwキーワードをブロック内で (引数なしで) 単独で使用しcatchて、スタック トレースをリセットすることなく、キャッチされた例外を伝播し続けることができることを理解しています。

私の質問は、これらの 2 つのブロックの違いは何ですか。

/* example 1 */
try { /* try stuff */ }
finally { /* finally/catch stuff */ }

/* example 2 */
try { /* try stuff */ }
catch { /* finally/catch stuff */ throw; }

の両方を実行してから を実行してから、スローされた例外が同じスタック トレースで伝播できるようにしないでtry stuffくださいfinally/catch stuff

4

5 に答える 5

2

try { /* try stuff */ }
catch { /* finally/catch stuff */ throw; }

エラーがない場合、最終的なものは実行されません。

ブロックはクリーンアップに使用されます。finally{}あなたの提案は貴重なリソースを無駄にします。

ここで本当にポイントを逃しましたcatch。エラーの処理についてのみです(オプションで段階的に)。ブロックはリソース管理に関するfinallyものであり、例外が発生したにもかかわらず実行されるという意味でのみ例外に関連しています。

于 2015-04-10T18:11:28.273 に答える
0

catchのコンテンツがtryエラーをスローした場合にのみ実行され、finally常にtryおよび/またはの後に実行されcatchます。

于 2015-04-10T18:12:56.143 に答える
0

違いは、finally ブロックは例外があるかどうかの両方で常に実行され、代わりに catch ブロックは例外がある場合にのみ実行されることです。

于 2015-04-10T18:13:19.673 に答える