catch (Exception e)
{
if (e is MyCustomException) throw;
throw new MyCustomException("An error occurred performing the calculation.", e);
}
Я думаю, что это примерно так кратко, я думаю.
Это немедленно подбрасывает MyCustomException
вверх по стеку (что вы и делаете с throw;
в своем вопросе), в то время как выбрасывает MyCustomException
, чтобы обернуть другие Exception
типы, встречающиеся при исполнении.
Кроме того, вы можете просто сделать:
catch (Exception e)
{
throw new MyCustomException("An error occurred performing the calculation.", e);
}
и в случае, когда MyCustomException
был пойман, у вас будет MyCustomException
в e.InnerException
, где e
a MyCustomException
на следующем уровне стека ИЛИ у вас будет System.Exception
в случаях, когда MyCustomException
это не то, что было поймано.