C#:
Обработка ошибок
Как это сделать:
Начнем с блока try-catch. Это как поставить сеть безопасности под канатоходца. Если он поскользнется, он не упадет вниз — его поймают.
using System;
class ПримерОбработкиОшибок {
static void Main() {
try {
int[] числа = {1, 2, 3};
Console.WriteLine(числа[5]); // Ой, индекс вне границ!
} catch (IndexOutOfRangeException e) {
Console.WriteLine("Ошибка перехвачена: " + e.Message);
}
}
}
Пример вывода при возникновении ошибок:
Ошибка перехвачена: Индекс находился вне границ массива.
Теперь добавим блок finally — это то, что происходит в любом случае, как и платежи налогов.
try {
// Потенциально проблемный код здесь
} catch (SomeSpecificException e) {
// Обработка этой конкретной ошибки здесь
} finally {
// Этот код выполняется независимо от того, что произошло выше
Console.WriteLine("Это всегда выполняется.");
}
Глубокое погружение
Обработка ошибок была в C# с момента его создания. Со временем она эволюционировала. В прошлом программисты полагались на возвращаемые коды или глобальные флаги для сигнализации о проблемах — громоздко и склонно к ошибкам.
C# использует исключения, более современный подход. Исключение генерируется, когда происходит что-то неожиданное, подобно поднятию флага на игре в американский футбол. Структурированная обработка исключений с блоками try, catch и finally делает управление этими моментами более ясным и чистым, чем старые методы проверки ошибок.
Альтернативы? Конечно. Есть UnhandledExceptionEventHandler
для исключений, которые прошли мимо. Или в асинхронном коде, обработка ошибок делается немного по-другому с объектами Task
, которые несут собственный груз исключений.
Детали реализации — подобно мелкому шрифту — важны. Исключения могут быть дорогостоящими, тормозя производительность, если их бросать без разбора. Поэтому мы используем их для исключительных случаев, а не для управления логикой каждый день.