Повышение производительности, скорее всего, незначительно, как объясняется в этом ответе .
Итак, давайте предположим, что производительность не является проблемой. Вы бросаете System.Exception
, просто чтобы переместить исполнение в catch
пункт . Бросать BadControlFlowThatShouldBeRewrittenException
, вероятно, было бы излишним.
Давайте разберемся с этим. У нас есть:
- Метод
GetDataFromServer
(имена методов должны быть PascalCase в C #), который может вызвать исключение или вернуть a bool
.
- Если результат был
true
, беги ProcessData
.
- Верните в
null
противном случае.
Похоже, метод, в котором написан этот код, просто делает слишком много вещей. GetDataFromServer
возвращая bool
внешний вид как недостаток дизайна, я ожидал бы, что этот метод вернет данные, которые он получает с сервера , некоторые из IEnumerable<SomeType>
которых будут содержать 0 или более элементов - т.е. счастливый путь возвращает n элементов, где n> 0 , не такой счастливый path возвращает 0 элементов, а несчастный путь разрывается с необработанным исключением, что бы это ни было.
Это сильно меняет внешний вид метода - опять же трудно сказать, имеет ли это смысл, потому что исходный пост имеет только одну точку выхода (и, следовательно, не будет компилироваться, так как не все пути кода возвращают значение ), поэтому это только дикая догадка:
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
Здесь вы посмотрите ProcessData
и увидите, что он выполняет итерацию result
, и возвращает, null
если в IEnumerable
.
Теперь, почему метод возвращается null
? Сервер не работает? Есть ли ошибка в запросе? Строка подключения использует неправильные учетные данные? Всякий раз, когда GetDataFromServer
взрывается с исключением, которого вы не ожидаете, вы глотаете его, суете его под ковер и возвращаете null
значение. Я бы порекомендовал отлавливать конкретные исключения в этом случае и регистрировать все остальное; отладка будет намного проще.
С общим catch
предложением, которое не фиксирует исключение, довольно сложно что-либо диагностировать. Я бы минимально сделал это вместо этого:
catch(Exception e)
{
return null;
}
Теперь вы можете по крайней мере сломать и проверить, e
если что-то пойдет не так.
TL; DR : Нет, выбрасывать и перехватывать исключения для управления потоком данных не очень хорошая идея.