Если во время выполнения программы что-то работает неправильно, создается исключение. Исключение останавливает текущий поток программы и если никакие меры не предпринимаются, программа просто прекращает выполнение. Причиной исключений могут быть ошибки в программе (например, деление числа на ноль) или неожиданный ввод (например, выбор несуществующего файла). Задачей программиста является предоставление программе возможности устранить проблемы, не приводя к сбою.
Программист может перехватить исключительные ситуации и сделать их обработку. Для этого в C# представлено несколько ключевых слов, — try, catch и finally — с помощью которых программа обнаруживает исключения, устраняет их и продолжает выполнение. Они способствуют повышению надежности приложений.
Исключения имеют типы, являющиеся производными от System.Exception. Исключения, генерируемые при компиляции:
Исключение
Описание
ArithmeticException
Основной класс исключений, происходящих при выполнении арифметических операций, таких как DivideByZeroException и OverflowException.
ArrayTypeMismatchException
Создается, когда массив не может хранить данный элемент, поскольку фактический тип элемента несовместим с фактическим типом массива.
DivideByZeroException
Создается при попытке разделить целое число на ноль.
IndexOutOfRangeException
Создается при попытке индексирования массива, если индекс меньше нуля или выходит за границы массива.
InvalidCastException
Создается, когда происходит сбой явного преобразования из основного типа в интерфейс либо в производный тип во время выполнения.
NullReferenceException
Создается при попытке ссылки на объект, значение которого равно null.
OutOfMemoryException
Создается при неудаче попытки выделения памяти с помощью оператора new. Это означает, что память, доступная для среды выполнения, уже исчерпана.
OverflowException
Создается при переполнении арифметической операции в контексте checked.
StackOverflowException
Создается, когда стек выполнения переполнен за счет слишком большого количества вызовов отложенных методов; обычно является признаком очень глубокой или бесконечной рекурсии.
TypeInitializationException
Создается, когда статический конструктор создает исключение, и не существует ни одного совместимого предложения catch для его захвата.