Trafienie w wydajność jest prawdopodobnie znikome, jak wyjaśniono w tej odpowiedzi .
Przejdźmy więc do wniosku, że wydajność nie stanowi problemu. Rzucasz System.Exception, aby przenieść egzekucję do catchklauzuli . BadControlFlowThatShouldBeRewrittenExceptionJednak rzucanie byłoby prawdopodobnie przesadą.
Rozwalmy to. Mamy:
- Metoda
GetDataFromServer(nazwy metod powinny być PascalCase w języku C #), które mogą wyrzucić wyjątek lub zwrócić a bool.
- Jeśli wynik był
true, uruchom ProcessData.
- Wróć
nullinaczej.
Wygląda na to, że metoda, w której napisany jest ten kod, po prostu robi zbyt wiele rzeczy. GetDataFromServerzwracanie boolwygląda jak błąd projektowy, oczekiwałbym, że ta metoda zwróci dane otrzymywane z serwera , niektóre IEnumerable<SomeType>zawierające 0 lub więcej elementów - tj. szczęśliwa ścieżka zwraca n elementów, gdzie n> 0 , niezbyt szczęśliwy ścieżka zwraca 0 elementów, a niezadowolona ścieżka wysadza się w powietrze z nieobsługiwanym wyjątkiem, cokolwiek to jest.
To bardzo zmienia wygląd metody - znowu trudno jest stwierdzić, czy ma to sens, ponieważ oryginalny post ma tylko jeden punkt wyjścia (a zatem nie skompiluje się, ponieważ nie wszystkie ścieżki kodu zwracają wartość ), więc to tylko dzikie przypuszczenie:
try
{
var result = GetDataFromServer();
return ProcessData(result);
}
catch
{
return null;
}
Tutaj możesz zobaczyć ProcessDatai zobaczyć, że iteruje iterację result, i zwraca, nulljeśli nie ma żadnego elementu w IEnumerable.
Dlaczego metoda się zwraca null? Serwer nie działa? Czy w zapytaniu jest błąd? Ciąg połączenia używa niewłaściwych danych logowania? Ilekroć GetDataFromServerwybuchnie wyjątek, którego się nie spodziewasz, połykasz go, wsuwasz pod dywan i zwracasz nullwartość. W tym przypadku zalecam wychwycenie określonych wyjątków i zapisanie wszystkiego; debugowanie będzie w ten sposób znacznie łatwiejsze.
Z ogólną catchklauzulą, która nie wychwytuje wyjątku, dość trudno jest zdiagnozować cokolwiek. Zamiast tego zrobiłbym to minimalnie:
catch(Exception e)
{
return null;
}
Teraz możesz przynajmniej złamać i sprawdzić, eczy coś pójdzie nie tak.
TL; DR : Nie, rzucanie i wyławianie wyjątków dla kontroli przepływu nie jest dobrym pomysłem.