Обработка ошибок и исключений

Обновлен: Ноябрь 2007

Если во время выполнения программы что-то работает неправильно, создается исключение. Исключение останавливает текущий поток программы и если никакие меры не предпринимаются, программа просто прекращает выполнение. Причиной исключений могут быть ошибки в программе (например, деление числа на ноль) или неожиданный ввод (например, выбор несуществующего файла). Задачей программиста является предоставление программе возможности устранить проблемы, не приводя к сбою.

В C# представлено несколько ключевых слов, — try, catch и finally — с помощью которых программа обнаруживает исключения, устраняет их и продолжает выполнение. Они способствуют повышению надежности приложений.

Try и Catch

Ключевые слова try и catch используются вместе. Если предполагается, что блок кода может вызвать исключение, воспользуйтесь ключевым словом try, и используйте catch, чтобы сохранить код, который будет выполнен при возникновении исключения. В этом примере в результате деления на ноль создается исключение, которое затем перехватывается. При отсутствии блоков try и catch произойдет сбой программы.

class ProgramTryCatch
{
    static void Main()
    {
        int x=0, y=0;

        try
        {
            x = 10 / y;
        }

        catch (System.DivideByZeroException)
        {
            System.Console.WriteLine("There was an attempt to divide by zero.");
        }
    }
}

В общем случае рекомендуется явно указывать тип исключения, обнаруженного кодом catch. Каждый try может иметь несколько операторов catch, каждый из которых обрабатывает отдельное исключение.

Блоки finally

Код, содержащийся в блоке finally, выполняется всегда, вне зависимости от возникновения исключения. Чтобы гарантировать возвращение ресурсов, например, убедиться, что файл закрыт, используйте блок finally.

try
{
    // Code to try here.
}
catch (SomeSpecificException ex)
{
    // Code to handle exception here.
}
finally
{
    // Code to execute after try (and possibly catch) here.
}

Использование обработки исключений

Исключения не всегда означают возникновение в программе серьезной проблемы. Часто с их помощью удобно оставить раздел кода, который больше не является релевантным, или они указывают на неудачное завершение метода. Большинство методов классов .NET Framework создают исключения для предупреждения об определенном условии.

Можно также вызвать собственные исключения, воспользовавшись ключевым словом throw. Пример.

class ProgramThrow
{
    static void DoWork(int x)
    {
        if (x > 5)
        {
            throw new System.ArgumentOutOfRangeException("X is too large");
        }
    }

    static void Main()
    {
        try
        {
            DoWork(10);
        }
        catch (System.ArgumentOutOfRangeException ex)
        {
            System.Console.WriteLine(ex.Message);
        }
    }
}

Если предполагается возникновение неожиданной ситуации, рекомендуется использовать исключения. Они будут полезны, например, при работе с данными, введенными пользователями, чтении файла или доступе к сведениям из Интернета.

См. также

Задачи

Практическое руководство. Перехват исключения

Основные понятия

Основы языка C#

Ссылки

Операторы обработки исключений (Справочник по C#)

throw (Справочник по C#)

try-catch (Справочник по C#)

try-finally (Справочник по C#)

try-catch-finally (Справочник по C#)