Typy wyjątków
Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 24 z 66.
W C# wyjątki są podzielone na różne typy w zależności od błędu, który reprezentują. Zrozumienie tych typów pomaga skuteczniej obsługiwać błędy.
Przyjrzyjmy się typowym typom wyjątków:
Klasą bazową wszystkich wyjątków jest System.Exception.
try
{
// Kod, który może zgłosić wyjątek
}
catch (Exception ex)
{
// Obsłuż dowolny wyjątek
Console.WriteLine(ex.Message);
}Niektóre popularne typy wyjątków:
ArgumentException: Zgłaszany, gdy metoda zostanie wywołana z nieprawidłowym argumentem.
string name = null;
if (name == null)
{
throw new ArgumentException("Name cannot be null");
}NullReferenceException: Zgłaszany podczas próby uzyskania dostępu do składowej przez odwołanie null.
string text = null;
// To spowoduje wyjątek NullReferenceException
int length = text.Length;IndexOutOfRangeException: Występuje, gdy indeks tablicy wykracza poza jej zakres.
int[] numbers = { 1, 2, 3 };
// To spowoduje zgłoszenie wyjątku IndexOutOfRangeException
int value = numbers[5];DivideByZeroException: Zgłaszany podczas dzielenia liczby całkowitej przez zero.
int result = 10 / 0; // To spowoduje zgłoszenie wyjątku DivideByZeroExceptionMożesz przechwytywać konkretne wyjątki:
try
{
int[] numbers = { 1, 2, 3 };
int value = numbers[5];
}
catch (IndexOutOfRangeException ex)
{
Console.WriteLine("Array index error: " + ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("General error: " + ex.Message);
}Wyzwanie
ŁatwyUtwórz metodę o nazwie ProcessArray, która:
- Przyjmuje tablicę liczb całkowitych i indeks jako parametry
- Próbuje uzyskać dostęp do elementu o podanym indeksie
- Zwraca wartość elementu, jeśli operacja się powiedzie
- Jeśli wystąpi
IndexOutOfRangeException, przechwytuje ten wyjątek i zwraca -1
Twoja metoda powinna mieć następującą sygnaturę:
public static int ProcessArray(int[] array, int index)Spróbuj swoich sił
using System;
class Program
{
public static int ProcessArray(int[] array, int index)
{
// Wpisz tutaj swój kod
return 0;
}
static void Main(string[] args)
{
// Wczytaj tablicę z danych wejściowych
string input = Console.ReadLine();
// Usuń nawiasy kwadratowe, jeśli występują
if (input.StartsWith("[") && input.EndsWith("]"))
{
input = input.Substring(1, input.Length - 2);
}
string[] parts = input.Split(',');
int[] array = new int[parts.Length];
for (int i = 0; i < parts.Length; i++)
{
array[i] = int.Parse(parts[i].Trim());
}
// Wczytaj indeks z danych wejściowych
int index = int.Parse(Console.ReadLine());
int result = ProcessArray(array, index);
Console.WriteLine(result);
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Tablice wielowymiarowe
Podstawy tablic 2DDeklarowanie i inicjalizacja tablic 2DDostęp do elementów tablic 2DZagnieżdżone pętle z tablicami 2DTablice postrzępionePodstawowe operacje na macierzachPodsumowanie — tablice wielowymiarowe4Techniki sterowania przepływem
Wczesne zwrotyKlauzule ochronneInstrukcje skoku (goto)Break i continueSpłaszczanie zagnieżdżonych warunków7Zaawansowane operatory logiczne
Ewaluacja z krótkim spięciemWarunkowe operatory logicznePriorytet operatorówPowtórzenie — zaawansowane operatory2Zaawansowane podejmowanie decyzji
Wiele warunkówZłożona logika Boole’aPorównanie if i switchZagnieżdżone instrukcje switchPodsumowanie — zaawansowane decyzje5Obsługa wyjątków
Podstawy try-catchTypy wyjątkówWiele bloków catchPraca z plikamiBlok finallyusing a try-finallyWłasne wyjątkiPowtórzenie — obsługa błędów3Udoskonalenia pętli
Wydajność pętliIterowanie po złożonych strukturachKażdy typ pętliRefaktoryzacja pętliPodsumowanie — zoptymalizowane pętle6Obsługa wartości null
Podstawy referencji nullTypy wartości dopuszczające nullWzorce sprawdzania nullProgramowanie defensywnePodsumowanie — bezpieczeństwo nullPoćwicz samodzielnie: Kompilator C# online