Исключения, создаваемые компилятором
Некоторые исключения автоматически создаются средой 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; Мы поможем в написании вашей работы! |
Мы поможем в написании ваших работ!