Рассмотрим ситуацию, когда у меня есть три (или более) способа выполнения вычислений, каждый из которых может завершиться ошибкой с исключением. Чтобы попытаться выполнить каждое вычисление, пока мы не найдем тот, который будет успешным, я сделал следующее:
double val;
try { val = calc1(); }
catch (Calc1Exception e1)
{
try { val = calc2(); }
catch (Calc2Exception e2)
{
try { val = calc3(); }
catch (Calc3Exception e3)
{
throw new NoCalcsWorkedException();
}
}
}
Есть ли какой-нибудь общепринятый шаблон, который позволяет добиться этого лучше? Конечно, я мог бы обернуть каждое вычисление во вспомогательный метод, который возвращает null в случае сбоя, а затем просто использовать оператор ??
, но есть ли способ сделать это в более общем плане (т.е. без необходимости писать вспомогательный метод. метод для каждого метода, который я хочу использовать)? Я думал о написании статического метода с использованием универсальных шаблонов, которые обертывают любой заданный метод в try / catch и возвращают null в случае неудачи, но я не уверен, как бы я поступил с этим. Есть идеи?