唯一の潜在的な問題は、非固有の をキャッチしているため、例外処理ガイドラインException
に準拠していないことです。
次のいずれかが、これらのガイドラインにより適合します。
try
{
DoSomething();
}
catch(SomeException ex)
{
throw new LibraryException(ex.Message, ex);
}
また:
try
{
DoSomething();
}
catch(Exception ex)
{
if (ex is SomeException || ex is SomeOtherException)
{
throw new LibraryException(ex.Message, ex);
}
throw;
}
パフォーマンスに関しては、例外がスローされると、何か例外が発生したことになり、おそらくそれをラップすることによるわずかな追加のオーバーヘッドは気にならないでしょう。
コメントから:
ほとんどの場合、ライブラリが例外をラップすることを選択すると、ライブラリのスコープ外でスローされるすべての例外がラップされます...
主観的であることは認めますが、私はこれに同意しません。例外をラップするライブラリの 1 つの例は です。これはSqlMembershipProvider
、いくつかの特定の例外を でラップしますProviderException
。
try
{
new Regex(this._PasswordStrengthRegularExpression);
}
catch (ArgumentException exception)
{
throw new ProviderException(exception.Message, exception);
}
ただし、呼び出し元が処理することが期待できないなどの他の例外SqlException
は、ラップされずに伝播されます。