Wydajność nie jest tutaj najbardziej istotna. Pytanie brzmi, który z nich prowadzi do bardziej czytelnych/możliwych do utrzymania/testowalnych programów. Możesz się później martwić o wydajność.
Zasadniczo nie należy używać wyjątków do kontroli przepływu. Są one z pewnością nielokalnymi wersjami, co utrudnia programom czytanie i śledzenie. Jako takie powinny być zarezerwowane dla wyjątkowych sytuacji. Jeśli możesz uciec, nie używając bloku try-catch
do kontroli przepływu, nie rób tego. Twoje programy będą bardziej czytelne i łatwiejsze w utrzymaniu.
„prawo” sposób obsłużyć tej sytuacji jest
var list = someMethod();
if(list == null || list.Length == 0) {
// handle something bad
}
string a = list[0];
if(a != null) {
// go
}
Można uniknąć czek że list
nie jest nieważna i nie jest pusta, jeśli nie jest to umowa (Contract.Ensures
), który gwarantuje wartość zwracana z someMethod
jest nie jest puste i nie jest puste.
Prawdą jest jednak, że wyjątki są lokalnie kosztowne. To, czy wpłyną one na wydajność twojego programu (to jest wąskie gardło), jest zupełnie inne. Ale używane właściwie, wyjątki na ogół nie są wąskim gardłem (kto dba o wydajność podczas awarii aplikacji?)
Anuluj słowo "szybciej", nie ma to znaczenia. I to nie jest nawet właściwy sposób na użycie try-catch, skoro używasz CLR do trollingu. – BoltClock
tylko przykładowy człowiek ... – carlosdubusm
@BoltClock, nie, nie jest. Jeśli wystąpi wyjątek. Jest wolniej. – CaffGeek