C# 例外処理: throw
と throw new Exception()
C# 例外を処理する場合、プログラマは次の 2 つの似た構造に遭遇することがあります。
<code class="language-csharp">try { ... } catch { throw }</code>
と
<code class="language-csharp">try { ... } catch (Exception e) { throw new Exception(e.Message); }</code>
どちらも例外をスローしますが、動作には大きな違いがあります。
throw
パラメーターのない throw
ステートメントは、try
ブロックの失敗の原因となった元の例外を再スローします。これは、元の例外のスタック トレースが保存され、デバッグやエラーの原因の追跡が容易になることを意味します。
throw new Exception()
一方、throw new Exception(e.Message)
は、元の例外のメッセージに設定された Message
属性を持つ新しい例外インスタンスを作成します。ただし、これにはいくつかの欠点があります:
ArgumentException
などの一部の例外には、異なるタイプの新しい例外を作成するときに失われる追加情報 (ParamName
など) が含まれています。 ベストプラクティス:
ほとんどの場合、例外を再スローするために throw e
または throw new Exception(e.Message)
を使用しないことを強くお勧めします。次の点を考慮してください:
throw;
を使用します。 InnerException
引数として渡すことによって保持していることを常に確認してください。 以上が「throw」と「throw new Exception()」: C# で例外を再スローする必要があるのはどのような場合ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。