1. ホーム
  2. c#

[解決済み] throw' と 'throw new Exception()' の違い

2022-04-16 14:43:23

質問

とはどのような違いがあるのでしょうか?

try { ... }
catch{ throw }

そして

try{ ... }
catch(Exception e) {throw new Exception(e.message) }

2番目はメッセージを表示しているにもかかわらず。

解決方法は?

throw; 元の例外を再スローし、元のスタックトレースを保持します。

throw ex; は元の例外を投げますが、スタックトレースはリセットされ、その例外が発生するまですべてのスタックトレース情報は破棄されます。 catch ブロックを作成します。



NEVER 書く throw ex;



throw new Exception(ex.Message); はさらに悪い。 これは全く新しい Exception のインスタンスを作成し、例外の元のスタックトレースとその型を失います。 (例 IOException ).

さらに、一部の例外は追加情報を保持する(例. ArgumentException.ParamName ).

throw new Exception(ex.Message); は、この情報も破棄します。

場合によっては、すべての例外をカスタム例外オブジェクトでラップし、例外がスローされたときにコードが何をしていたかについての追加情報を提供できるようにしたいこともあります。

これを実現するために、以下のような新しいクラスを定義します。 Exception , 4 つの例外コンストラクタをすべて追加します。 また、オプションとして InnerException と追加情報、そして新しい例外クラスを投げます。 を渡す exInnerException パラメータ . を渡すことで、オリジナルの InnerException スタックトレースを含む、元の例外のすべてのプロパティを保持します。