6

重複の可能性:
C# で例外を再スローする適切な方法は何ですか?

「throw ex」の使用法が元のスタック トレースを非表示にする理由を理解したいですか? C# コンパイラを設計する際の舞台裏の基本的な哲学は何でしたか?

4

2 に答える 2

12

これは実際にはC#の質問ではなく、CLIの設計の質問であり、さまざまなIL命令に帰着throwrethrowます。

基本的に、throw ex;exオリジナルの場合でも)はILですがthrow、-throw;はILrethrowです。

スローする特定の例外を指定している場合、この例外は論理的にここから発生していることになります。ここでは、このメソッドです。そうでない場合は、次のいずれかを行います。

throw;

throw ex;または:例外を別の例外でラップするのではなく、元の例外を保持し、新しい例外がどこから来たのかを示します。

throw new SomeException(ex);

この場合、呼び出し元はを介して元のスタックトレースを取得できますex.InnerException

于 2012-08-13T09:28:17.703 に答える
2

例外をキャッチすると、その「発生場所」は別の場所にあり、例外はスローされた場所までスタック トレースを保持します。クラスthrowのインスタンスのスタック トレースを初期化すると考えてください。Exceptionそのため、現在のスタックthrow ex;でのスタック トレースを初期化しexます。

于 2012-08-13T09:29:00.060 に答える