Одной из альтернатив будет сохранение возвращаемого значения во временной переменной:
public bool SomeFunction()
{
bool success = true;
try
{
//somecode
}
catch(Exception ex)
{
MessageBox.Show(ex.message);
success = false;
}
return success;
}
Но лично я нахожу способ, которым вы написали его (с одним оператором catch-all catch), более читабельным. С другой стороны, если вы ожидаете конкретного исключения, и у вас может быть несколько путей, чтобы вернуть успех или нет ...
try
{
DoTheImportantThing();
DoTheOtherThingThatMightFailButWeDontCare();
}
catch (DontCareAboutItException ex)
{
log.Info(ex);
}
catch (Exception ex)
{
log.Error(ex);
return false;
}
return true;
Тогда, на мой взгляд, лучше всего выдвигать операторы возврата как можно ближе к концу.
В качестве дополнительного примечания, в зависимости от приложения, рассмотрите возможность регистрации исключений, которые вы ловите, а не просто показывает их пользователю. Зарегистрированные исключения намного надежнее, чем рассказы пользователей о произошедшем.