web-dev-qa-db-ja.com

c#.netでのthrowとthrowexの違い

throwthrow exの違いを簡単に教えてもらえますか? throwは以前の例外を格納し、この行を取得しないことを読みました。
例を挙げて簡単に説明できますか?

9
maverickabhi

はい-throwは、キャッチされた例外を再スローし、スタックトレースを保持します。 throw exは同じ例外をスローしますが、スタックトレースをリセットしますそのメソッドに。

wantスタックトレースをリセットする(つまり、パブリック呼び出し元をライブラリの内部動作から保護する)場合を除いて、throw一般的により良い選択です。例外が発生した場所を確認できます。

また、「パススルー」キャッチブロックについても触れておきます。

try
{
   // do stuff
}
catch(Exception ex)
{
    throw;
}

無意味です。これは、try/catchがまったくない場合とまったく同じ動作です。

25
D Stanley

スローすると、元の例外が再スローされます。

throw exは新しい例外を作成するため、スタックトレースが変更されます。通常はほとんど意味がありません。一般に、単にスローするか、新しい例外を作成してスローする必要があります。

// not a great code, demo purposes only
try{
File.Read("blah");
}
catch(FileNotFoundException ex){
throw new ConfigFileNotFoundException("Oops", ex);
}
5
Evgeni