Menu
Coddy logo textTech

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 DivideByZeroException

Moż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);
}
challenge icon

Wyzwanie

Łatwy

Utwórz metodę o nazwie ProcessArray, która:

  1. Przyjmuje tablicę liczb całkowitych i indeks jako parametry
  2. Próbuje uzyskać dostęp do elementu o podanym indeksie
  3. Zwraca wartość elementu, jeśli operacja się powiedzie
  4. 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);
    }
}
quiz iconSprawdź się

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

Poćwicz samodzielnie: Kompilator C# online