throw
とthrow ex
の違いを簡単に教えてもらえますか? throw
は以前の例外を格納し、この行を取得しないことを読みました。
例を挙げて簡単に説明できますか?
はい-throw
は、キャッチされた例外を再スローし、スタックトレースを保持します。 throw ex
は同じ例外をスローしますが、スタックトレースをリセットしますそのメソッドに。
wantスタックトレースをリセットする(つまり、パブリック呼び出し元をライブラリの内部動作から保護する)場合を除いて、throw
は一般的により良い選択です。例外が発生した場所を確認できます。
また、「パススルー」キャッチブロックについても触れておきます。
try
{
// do stuff
}
catch(Exception ex)
{
throw;
}
無意味です。これは、try/catch
がまったくない場合とまったく同じ動作です。
スローすると、元の例外が再スローされます。
throw exは新しい例外を作成するため、スタックトレースが変更されます。通常はほとんど意味がありません。一般に、単にスローするか、新しい例外を作成してスローする必要があります。
// not a great code, demo purposes only
try{
File.Read("blah");
}
catch(FileNotFoundException ex){
throw new ConfigFileNotFoundException("Oops", ex);
}