2つの違いがあります
最初に正しいのは、2 番目のものによって、新しいスタック トレースで新しい例外がスローされることです。これにより、貴重なデバッグ情報が失われるため、決して実行しないでください。2番目の例を行う正しい方法は次のようになります
try
{
... some code ...
}
catch (Exception) //You can include the "ex" if you need it in your cleanup code
{
... some cleanup code ...
throw; //Don't use the "ex" here
}
2 番目の違いは、最初の例ではキャッチされ、2 番目の例ではキャッチされない非常に少数の例外があることです。主に、これらの例外は、CLR に準拠していないコードからスローされるものです。Exception
C# コードから非派生例外をスローする方法はありません。
バブルアップする前に例外に追加情報を追加したい場合は、新しい例外をスローし、古い例外をInnerException
try
{
... some code ...
}
catch (Exception ex)
{
... some cleanup code ...
throw new MyCustomException("Some useful information", ex);
}