Показник ефективності, мабуть, незначний, як пояснено у цій відповіді .
Тож давайте підемо з думкою, що продуктивність не є проблемою. Ви кидаєте 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 : Ні, кидання та вилучення винятків для контролю потоку не є хорошою ідеєю.