У вас есть много вариантов здесь.Просто упомянуть 2 из них:
Опция 1: оболочка и действие.
public void ProcessFile()
{
ExceptionFilters.CatchFileExceptions( () => {
// .. do your thing
});
}
// somewhere else
public static class ExceptionFilters
{
public static void CatchFileExceptions(Action action)
{
try
{
action();
}
catch(ExceptionTypeA aex)
{
}
// ... and so on
catch(Exception ex)
{
}
}
}
Опция 2: использовать фильтры исключений Эта опция фактически перехватывает каждое исключение, если только вы не используете фильтры (C #6 +)
public void ProcessFile()
{
try
{
// do your thing
}
catch(Exception ex)
{
if(!ProcessFileExceptions(ex))
{
throw; // if above hasn't handled exception rethrow
}
}
}
public static void ProcessFileExceptions(Exception ex)
{
if(ex is ArgumentNullException)
{
throw new MyException("message", ex); // convert exception if needed
}
// and so on
return true;
}
здесь вы также можете отфильтровать интересующие вас исключения:
public void ProcessFile()
{
try
{
// do your thing
}
catch(Exception ex) when(IsFileException(ex))
{
if(!ProcessFileExceptions(ex))
{
throw; // if above hasn't converted exception rethrow
}
}
}
public static bool IsFileException(Exception ex)
{
return ex is ArgumentNullException || ex is FileNotFoundException; // .. etc
}