Показник ефективності, мабуть, незначний, як пояснено у цій відповіді .
Тож давайте підемо з думкою, що продуктивність не є проблемою. Ви кидаєте System.Exception, просто щоб перемістити виконання в catchпункт . Кидати котрий-небудь BadControlFlowThatShouldBeRewrittenException, мабуть, буде надмірно, хоча.
Розберемо це. Ми маємо:
- Метод
GetDataFromServer(назви методів повинні бути PascalCase в C #), який, можливо, може кинути виняток або повернути a bool.
- Якщо результат був
true, запустіть ProcessData.
- Поверніться
nullінакше.
Схоже, метод, де написаний цей код, просто робить занадто багато речей. GetDataFromServerповернення boolвиглядає як недолік дизайну, я б очікував, що цей метод поверне дані, отримані з сервера , IEnumerable<SomeType>які містять 0 і більше елементів - тобто щасливий шлях повертає n елементів, де n> 0 , не дуже щасливий шлях повертає 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 : Ні, кидання та вилучення винятків для контролю потоку не є хорошою ідеєю.