Обработка исключений в C#

Что такое исключение?

  • Исключение .NET - это объект, который описывает условие ошибки во время выполнения.
  • Когда возникает условие ошибки во время выполнения, создается объект, который представляет ошибку времени выполнения и генерируется в методе, вызвавшем ошибку.
  • Этот метод может обрабатывать само исключение или передавать его. Как бы то ни было, исключение попадает и обрабатывается в какой-то момент.
  • Исключения могут быть сгенерированы CLR или могут быть сгенерированы кодом.
  • Исключения, брошенные .NET, связаны с первичными ошибками, которые нарушают правила языка C# или ограничения среды выполнения .NET
  • Обработка исключений .NET выполняется с помощью try, catch, throw и finally.
  • Блок try содержит операторы программ, которые необходимо отслеживать

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

Обработка исключений .NET выполняется с помощью try, catch, throw и finally.

Исключение:

Блок try содержит программные инструкции, которые необходимо отслеживать для исключений. Если в блоке try происходит исключение, оно выбрасывается.
Ваш код может перехватывать исключения, которые автоматически генерируются CLR. Мы используем ключевое слово throw для ручного исключения.

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

Обработчик исключений пытается восстановить из-за ошибки или обнаруживает, что ошибка не может быть восстановлена, а затем обеспечивает легкий выход из программы.
Оператор finally также связан с оператором try и содержит блок кода, который выполняется независимо от того, происходит ли исключение или нет

Исключение сбоя:

Оператор catch связан с оператором try и содержит блок кода для обработки исключения, которое встречается в блоке try.
Блок catch выполняется только в том случае, если в блоке try возникает исключение определенного типа.
Оберните код, который потенциально может вызвать исключение внутри try {}, за которым следует catch {}.

После попытки вы можете иметь несколько блоков catch. .NET войдет в первый блок catch, который полиморфно совместим с заброшенным исключением. Если у вас есть код, который генерирует как ArgumentException, так и ArgumentNullException, например, порядок ваших блоков catch важен, потому что
ArgumentNullException является дочерним классом ArgumentException.

Вот пример того, что не надо делать:

Поскольку ArgumentNullException является типом ArgumentException, а ArgumentException является первым в списке catch, он будет вызван.
Правило: всегда упорядочивайте блоки catch catch в большинстве случаев в первом порядке.

Блок Catch

Оператор try содержит блок кода, в котором может возникнуть исключение.

Общая структура этих утверждений приведена ниже:

Пример:

Что произойдет, если вы запустите программу без предоставления аргумента командной строки? Среда выполнения генерирует исключение следующим образом:

Поскольку мы не приводили Hello аргумент командной строки, в args ничего не было [0]. Поэтому .NET дал это не слишком дружественное сообщение об ошибке
«Исключение System.IndexOutOfRangeException». Мы можем исправить эту проблему, проверив длину массива перед доступом к его первому элементу. Это хорошо работает в простых случаях, но если нам нужно проверить каждое возможное условие ошибки в каждой строке кода, наш код будет раздутым с большей ошибкой, чем фактический код.

Более того, мы также должны проверить ошибки в условиях ошибки.
Цель обработки исключений - описать регулярный поток программы в одной части кода, не задумываясь обо всех особых
случаях. Затем мы можем охватить исключительные случаи в отдельном блоке кода. Это дает более понятный код, так как здесь не требуется
прерывать поток программы, чтобы проверить каждое возможное условие ошибки. Для среды выполнения требуется переход от обычного
потока программы к обработчику исключений, когда происходит исключительное событие.

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

Блок finally

Блок finally связан с блоком try и содержит блок операторов, которые выполняются независимо от того, происходит ли исключение
или нет в блоке try. Наконец, он определяет код, который выполняется всегда.
При нормальном выполнении он выполняется после блока try.
Когда возникает исключение, оно выполняется после обработчика, если оно есть или до распространения, в зависимости от случая

  1. Утверждение finally связано с оператором try и содержит оператор блока, который выполняется независимо от того, происходит ли исключение или нет внутри блока try
  2. Определяет код, который всегда выполняется
  3. При нормальном выполнении он выполняется после блока try
  4. когда возникает исключение, оно выполняется после обработчика, если какое-либо или до распространения, в зависимости от обстоятельств

Конструкция try-catch-finally может быть записана как:

Пример:

  1. Когда выполнение достигает x = y / z; поскольку значение z равно нулю, CLR генерирует исключение DivideByZeroException.
  2. Теперь необходимо выполнить соответствующий блок catch. CLR ищет соответствующий блок catch в том порядке, в котором он написан
  3. Первый блок catch является подходящим, поскольку он написан для обработки DivideByZeroException. Этот первый блок catch выполнен.
  4. Будет выполнен только один блок catch
  5. Затем выполнение выполняется для окончательного блокирования
  6. Теперь выполнение переходит к следующему утверждению:

Пользовательское исключение

  1. Пользовательские исключения могут быть определены согласно требованию
  2. Создайте настраиваемый класс исключений, наследуя класс Exception
  3. Чтобы поднять пользовательское исключение в подходящий момент, используйте throw myExcepObj;

Пример:

 

Источник: http://www.csharpstar.com/exception-handling-csharp/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)

Add a Comment

Ваш e-mail не будет опубликован. Обязательные поля помечены *