Menu
Coddy logo textTech

Exception Types

Часть раздела Логика и управление потоком путешествия по C# на Coddy — урок 24 из 66.

В C# исключения классифицируются по разным типам в зависимости от ошибки, которую они представляют. Понимание этих типов помогает обрабатывать ошибки более эффективно.

Давайте посмотрим на распространенные типы исключений:

Базовым классом для всех исключений является System.Exception.

try
{
    // Код, который может выбросить исключение
}
catch (Exception ex)
{
    // Обработка любого исключения
    Console.WriteLine(ex.Message);
}

Некоторые распространённые типы исключений:

ArgumentException: Выбрасывается при вызове метода с недопустимым аргументом.

string name = null;
if (name == null)
{
    throw new ArgumentException("Name cannot be null");
}

NullReferenceException: Выбрасывается при попытке доступа к члену null-ссылки.

string text = null;
// This will throw NullReferenceException
int length = text.Length;

IndexOutOfRangeException: Выбрасывается, когда индекс массива выходит за пределы массива.

int[] numbers = { 1, 2, 3 };
// This will throw IndexOutOfRangeException
int value = numbers[5];

DivideByZeroException: Выбрасывается при делении целого числа на ноль.

int result = 10 / 0; // This will throw DivideByZeroException

Вы можете перехватывать конкретные исключения:

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

Задание

Легко

Создайте метод с именем ProcessArray, который:

  1. Принимает массив целых чисел и индекс в качестве параметров
  2. Пытается получить доступ к элементу по указанному индексу
  3. Возвращает значение элемента в случае успеха
  4. Если возникает IndexOutOfRangeException, перехватите его и верните -1

Ваш метод должен иметь следующую сигнатуру:

public static int ProcessArray(int[] array, int index)

Шпаргалка

Базовый класс для всех исключений — System.Exception:

try
{
    // Code that might throw an exception
}
catch (Exception ex)
{
    // Handle any exception
    Console.WriteLine(ex.Message);
}

Общие типы исключений:

ArgumentException: Выбрасывается, когда метод вызывается с недопустимым аргументом:

string name = null;
if (name == null)
{
    throw new ArgumentException("Name cannot be null");
}

NullReferenceException: Выбрасывается при обращении к члену на нулевой ссылке:

string text = null;
int length = text.Length; // Throws NullReferenceException

IndexOutOfRangeException: Выбрасывается, когда индекс массива выходит за пределы:

int[] numbers = { 1, 2, 3 };
int value = numbers[5]; // Throws IndexOutOfRangeException

DivideByZeroException: Выбрасывается при делении целого числа на ноль:

int result = 10 / 0; // Throws DivideByZeroException

Перехват специфических исключений:

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);
}

Попробуйте сами

using System;

class Program
{
    public static int ProcessArray(int[] array, int index)
    {
        // Напишите свой код здесь
        return 0;
    }

    static void Main(string[] args)
    {
        // Чтение входного массива
        string input = Console.ReadLine();
        
        // Удаление скобок, если они присутствуют
        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());
        }
        
        // Чтение входного индекса
        int index = int.Parse(Console.ReadLine());
        
        int result = ProcessArray(array, index);
        Console.WriteLine(result);
    }
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком