Что такое Runtime error (ошибка времени выполнения) в C#?

«Что такое Runtime error (ошибка времени выполнения) в C#?» — вопрос из категории C# Core, который задают на 25% собеседований C# Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Runtime error (ошибка времени выполнения) — это исключение, которое возникает во время исполнения программы, когда синтаксически корректный код приводит к недопустимой операции. В отличие от ошибок компиляции, компилятор не может их обнаружить на этапе сборки.

Распространённые примеры исключений времени выполнения в .NET:

  • NullReferenceException: Попытка обращения к члену объекта, который равен null.
  • IndexOutOfRangeException: Попытка доступа к элементу массива или коллекции по индексу за её пределами.
  • DivideByZeroException: Деление целочисленного значения на ноль.
  • InvalidCastException: Неудачное приведение типа во время выполнения.
  • StackOverflowException: Бесконечная рекурсия, исчерпавшая стек вызовов.
  • OutOfMemoryException: Нехватка доступной памяти для выделения нового объекта.

Пример кода, вызывающего ошибку времени выполнения:

int[] numbers = { 1, 2, 3 };
Console.WriteLine(numbers[5]); // IndexOutOfRangeException

Обработка ошибок времени выполнения: Для обработки таких ситуаций и предотвращения аварийного завершения программы используется конструкция try-catch-finally.

try
{
    int divisor = 0;
    int result = 10 / divisor; // Потенциальный DivideByZeroException
}
catch (DivideByZeroException ex)
{
    // Логируем и обрабатываем конкретную ошибку
    Console.WriteLine($"Ошибка: {ex.Message}");
    // Возвращаем значение по умолчанию или пробрасываем исключение выше
}
catch (Exception ex) // Общий обработчик для других исключений
{
    Console.WriteLine($"Произошла непредвиденная ошибка: {ex.Message}");
}
finally
{
    // Этот блок выполнится всегда, даже если было исключение
    Console.WriteLine("Операция завершена (успешно или с ошибкой).");
}

Профилактика: Лучшая практика — предвосхищать возможные ошибки с помощью проверок (валидация входных данных, проверка на null, использование безопасных операторов как ?. и ??).