Я хочу написать метод, который обрабатывает исключения и который будет вызываться внутри блока catch
. В зависимости от типа переданного исключения исключение либо передается как внутреннее исключение нового исключения, либо просто повторно забрасывается. Как сохранить трассировку стека во втором случае?C# re-throw exception в методе, предназначенном для обработки исключений и сохраняющем stacktrace
Пример:
public void TestMethod()
{
try
{
// can throw an exception specific to the project or a .Net exception
SomeWorkMethod()
}
catch(Exception ex)
{
HandleException(ex);
}
}
private void HandleException(Exception ex)
{
if(ex is SpecificException)
throw ex; //will not preserve stack trace...
else
throw new SpecificException(ex);
}
То, что я не хотел бы делать это, потому что картина повторяется во многих местах, и там не будет факторизация:
try
{
SomeWorkMethod();
}
catch(Exception ex)
{
if(ex is SpecificException)
throw;
else
throw new SpecificException(ex);
}
Почему вы не использовать что-то вроде "если бросить (HandleException (ех)!);". Я знаю, что это не совсем то, что вы хотите, но это просто и не очень похоже на второй пример. – Julo
Почему у вас нет отдельного улова для 'SpecificException'? 'catch (SpecificException e) {throw;}' – juharr