Исключения, создаваемые компилятором



Некоторые исключения автоматически создаются средой CLR приложения платформы .NET Framework, когда происходит сбой основной операции. Эти исключения и условия их возникновения перечислены в следующей таблице.

Исключение Описание
ArithmeticException Основной класс исключений, происходящих при выполнении арифметических операций, таких как DivideByZeroException и OverflowException.
ArrayTypeMismatchException Создается, когда массив не может хранить данный элемент, поскольку фактический тип элемента несовместим с фактическим типом массива.
DivideByZeroException Создается при попытке разделить целое число на ноль.
IndexOutOfRangeException Создается при попытке индексирования массива, если индекс меньше нуля или выходит за границы массива.
InvalidCastException Создается, когда происходит сбой явного преобразования из основного типа в интерфейс либо в производный тип во время выполнения.
NullReferenceException Создается при попытке ссылки на объект, значение которого равно null.
OutOfMemoryException Создается при неудаче попытки выделения памяти с помощью оператора new. Это означает, что память, доступная для среды выполнения, уже исчерпана.
OverflowException Создается при переполнении арифметической операции в контексте checked.
StackOverflowException Создается, когда стек выполнения переполнен за счет слишком большого количества вызовов отложенных методов; обычно является признаком очень глубокой или бесконечной рекурсии.
TypeInitializationException Создается, когда статический конструктор создает исключение, и не существует ни одного совместимого предложения catch для его захвата.

 


How to: Handle an Exception Using try/catch

The purpose of a try-catch block is to catch and handle an exception generated by working code. Some exceptions can be handled in a catch block and the problem solved without the exception being re-thrown; however, more often the only thing that you can do is make sure that the appropriate exception is thrown.

Example

In this example, IndexOutOfRangeException is not the most appropriate exception: ArgumentOutOfRangeException makes more sense for the method because the error is caused by the index argument passed in by the caller.

class TestTryCatch { static int GetInt(int[] array, int index) {    try    {        return array[index];    }    catch (System.IndexOutOfRangeException e) // CS0168    {        System.Console.WriteLine(e.Message);        //set IndexOutOfRangeException to the new exception's InnerException        throw new System.ArgumentOutOfRangeException("index parameter is out of range.", e);    } } }

Comments

The code that causes an exception is enclosed in the try block. A catch statement is added immediately after to handle IndexOutOfRangeException, if it occurs. The catch block handles the IndexOutOfRangeException and throws the more appropriate ArgumentOutOfRangeException exception instead. In order to provide the caller with as much information as possible, consider specifying the original exception as the InnerException of the new exception. Because the InnerException property is readonly, you must assign it in the constructor of the new exception.


Обработка исключений с помощью блока try-catch

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

Пример

В этом примере IndexOutOfRangeException не является наиболее подходящим исключением. Для данного метода больше подходит исключение ArgumentOutOfRangeException, поскольку ошибка вызвана переданным методу параметром index.

ß-----

 

 

Примечания

Код, вызывающий исключение, находится в блоке try. Инструкция catch помещается сразу после него, чтобы обрабатывать исключение IndexOutOfRangeException, если оно происходит. В блоке catch исключение IndexOutOfRangeException обрабатывается, и вместо него создается более подходящее исключение ArgumentOutOfRangeException. Чтобы вызывающий объект получил максимально подробную информацию, рекомендуется указать исходное исключение в качестве значения InnerException нового исключения. Поскольку свойство InnerException доступно только для чтения, его значение необходимо присваивать только в конструкторе нового исключения.

 


Дата добавления: 2019-03-09; просмотров: 205; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!