1. Wprowadzenie do C#
  2. Szybki start
  3. Pierwszy program
  4. Komentarze
  5. Typy danych
  6. Zmienne
  7. Pola
  8. Właściwości
  9. Stałe
  10. Metody
  11. Instrukcje warunkowe
  12. Pętle
  13. Tablice
  14. Kolekcje
  15. Klasy
  16. Dziedziczenie
  17. Polimorfizm
  18. Konwersja typów
  19. Właściwości klasy String
  20. Typy wyliczeniowe
  21. Interfejsy
  22. Klasy statyczne
  23. Klasy Abstrakcyjne
  24. Przestrzenie nazw
  25. Wyjątki
  26. Typy generyczne
  27. JSON
  28. XML
  29. Podsumowanie

Wyjątki

W języku C#, wyjątek (ang. exception) to obiekt reprezentujący błąd, który może wystąpić podczas wykonywania kodu. Można je rzucić (ang. throw) i obsłużyć (ang. catch), aby zapobiec zatrzymaniu programu i umożliwić jego dalsze działanie. Wbudowane klasy wyjątków w C# obejmują m.in. ArgumentException, IndexOutOfRangeException i DivideByZeroException. Można też tworzyć własne klasy wyjątków dziedziczące po Exception.

W C# wyjątki są obsługiwane za pomocą czterech słów kluczowych: try catch finally throw

								
try
{
    // Kod, w którym mogą wystąpić wyjątki
}

catch (TypWyjatku nazwaZmiennej)
{
    // Kod, który jest wykonywany, gdy wystąpi wyjątek typu TypWyjatku
}

catch (InnyTypWyjatku nazwaZmiennej)
{
    // Kod, który jest wykonywany, gdy wystąpi wyjątek typu InnyTypWyjatku
}

finally
{
    // Kod, który zawsze jest wykonywany, niezależnie od tego, czy wyjątek został rzucony czy nie
}

								
						

Można rzucić wyjątek za pomocą słowa kluczowego "throw".

								
throw new Exception("Mój wyjątek");
								
						

Jeśli chcesz rzucić wyjątek, który jest już zmienną, to można to zrobić przez po prostu użycie throw bez argumentów.

								
Exception e = new Exception("Mój wyjątek");
throw e;
								
						

Można też rzucić wyjątek jako odpowiedź na konkretny warunek.

								
if (age < 0)
{
    throw new ArgumentException("Wiek nie może być ujemny");
}
								
						

Oto przykłady predefiniowanych wyjątków pochodzących z klasy System.SystemException

Klasa ArgumentException

								
string name = null;

if (name == null)
{
    throw new ArgumentException("Nazwa nie może być null");
}
								
						

Klasa NullReferenceException

								
MyClass myObj = null;

myObj.DoSomething(); // Wyświetli NullReferenceException

								
						

Klasa OutOfMemoryException

								
List<int> list = new List<int>();

while (true)
{
    list.Add(1); // Wyświetli OutOfMemoryException po pewnym czasie
}
								
						

Klasa StackOverflowException

								
void RecursiveMethod()
{
    RecursiveMethod(); // Wyświetli StackOverflowException
}
								
						

Klasa IndexOutOfRangeException

								
int[] array = new int[5];

array[10] = 1; // Wyświetli IndexOutOfRangeException

								
						

Klasa InvalidOperationException

								
Queue<int> queue = new Queue<int>();

queue.Dequeue(); // Wyświetli InvalidOperationException, ponieważ kolejka jest pusta
								
						

Klasa ArrayTypeMismatchException

								
object[] array = new string[5];

array[0] = 5; // Wyświetli ArrayTypeMismatchException, ponieważ przypisuje się liczbę do tablicy typu string

								
						

Klasa ArithmeticException

								
int result = 5 / 0; // Wyświetli ArithmeticException
								
						

Klasa OverflowException

								
int max = int.MaxValue;

int result = max + 1; // Wyświetli OverflowException
								
						

Klasa FormatException

								
int.Parse("abc"); // Wyświetli FormatException


								
						
Notatka

Te przykłady pokazują, że istnieje wiele różnych wyjątków, które mogą być rzucane przez runtime w różnych sytuacjach. Programiści powinni być świadomi tych wyjątków i być w stanie je obsłużyć, aby uniknąć zatrzymania programu.