C# obsługuje błędy za pomocą wyjątków przechwytywanych poprzez try/catch/finally. Prawidłowa obsługa wyjątków oznacza przechwytywanie określonych typów wyjątków, czyszczenie zasobów (często za pomocą using), tworzenie znaczących wyjątków niestandardowych i nieukrywanie błędów w milczeniu.
