W tym artykule dowiesz się nieco o wyjątkach. Postaram się również wyjaśnić najważniejsze kwestie związane z tym zagadnieniem. Zaczynajmy.
Co to jest wyjątek?
- Wyjątek, to nieprzewidziany “scenariusz” działania programu.
Po co używać instrukcji try?
- Jak się pewnie domyślasz, nieprzewidziane zachowanie naszego programu można obsłuzyć. Właśnie z takim zamiarem stosuje się instrukcję try
Jaka jest budowa instrukcji try?
- Piszemy instrukcję try, następnie instrukcję catch lub finally, lub obie. Poniżej znajduje się przykład.
Czym są klauzule catch oraz finally?
- catch – Po klauzuli catch możemy określić jakiego rodzaju wyjątki mają być przechwytywane. Znaczy to tyle, że w przypadku gdy taki wyjątek będzie miał miejsce, program wejdzie właśnie w ten blok kodu znajdujący się pomiędzy nawiasami klamrowymi.
- finally – Zawiera blok instrukcji, które zawsze są wykonywane. Jest przydatny do wykonywania czynności porządkowych, np. do zamknięcia połączenia sieciowego.
Gdzie znaleźć nazwy wyjątków?
- Listę wszystkich wyjątków możesz znaleźć tutaj.
Jak obsłużyć wszystkie wyjątki jednocześnie, bez konieczności deklarowania wszystkich?
- Są dwa sposoby. Pozbywamy się nawiasów po instrukcji catch, lub używamy klasy Exception. Drugi sposób daje nam dodatkową możliwość podejrzenia szczegółów błędu.
Przyjrzyjmy się zatem najbardziej znanemu przykładowi z dzieleniem przez zero.
Dzięki wykorzystaniu obsługi błędów, nasz program nie zakończy działania w momencie pojawienia się wyjątku, tylko poinformuje nas o zaistniałym wyjątku.
Na podstawie powyższego przykładu możesz łatwo zauważyć, że bloków catch może być wiele, natomiast trzeba wiedzieć, że blok obsługujący wyjątek ogólny (Exception) musi znajdować się na samym końcu.
W C# 6.0 wprowadzono możliwosć używania z klauzulą catch filtrów wyjątków, które to filtry definiuje się za pomocą klauzuli when.
Gdyby w tym przykładzie zgłoszony został wyjątek typu WebException, to nastąpiłoby obliczenie wartości wyrażenia logicznego znajdującego się za słowem kluczowym when. W przypadku gdy to wyrażenie miałoby wartość false zostałby zignorowany i nastąpiłoby sprawdzenie kolejnych klauzuli catch. Dzięki zastosowaniu klauzuli when, mamy możliwość sprawdzenia wartości wyjątku przed wykonaniem bloku catch.