唯一的潜在问题是您正在捕获非特定的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;
}
至于性能,一旦抛出异常,就会发生异常情况,您可能并不关心包装它的额外开销。
来自评论:
在大多数情况下,当库选择包装异常时,它将包装在库范围之外抛出的所有异常,...
我不同意这一点,尽管它确实是主观的。包装异常的库的一个示例是SqlMembershipProvider
,它将一些特定的异常包装在 a 中ProviderException
,例如:
try
{
new Regex(this._PasswordStrengthRegularExpression);
}
catch (ArgumentException exception)
{
throw new ProviderException(exception.Message, exception);
}
但是其他异常(例如SqlException
无法期望调用者处理的异常)会被展开传播。