using System;

class NotHandled { static void Main() {

int[] nums = new int[4];

Console.WriteLine('До генерирования исключения.');

// Сгенерировать исключение в связи с выходом индекса за границы массива, for (int i=0; i < 10; i++)    {

nums[i] = i;

Console.WriteLine('nums[{0}] :    {1}',    i,    nums[i]);

Когда возникает ошибка индексирования массива, выполнение программы прерывается и выдается следующее сообщение об ошибке.

Необработанное исключение: System.IndexOutOfRangeException:

Индекс находился вне границ массива, в NotHandled.Main() в <имя_файла>:строка 16

Это сообщение уведомляет об обнаружении в методе NotHandled. Main () необработанного исключения типа System. IndexOutOfRangeException, которое связано с выходом индекса за границы массива.

Такие сообщения об ошибках полезны для отладки программы, но, по меньше мере, нежелательны при ее использовании на практике! Именно поэтому так важно организовать обработку исключительных ситуаций в самой программе.

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

// Не сработает!

using System;

class ExcTypeMismatch { static void Main() {

int[] nums = new int [4];

try {

Console.WriteLine('До генерирования исключения.');

// Сгенерировать исключение в связи с выходом индекса за границы массива, for(int i=0; i < 10; i++)    {

nums[i] = i;

Console.WriteLine('nums[{0}]:    {1}',    i,    nums[i]);

}

Console.WriteLine('He подлежит выводу');

}

/* Если перехват рассчитан на исключение DivideByZeroException, то перехватить ошибку нарушения границ массива не удастся. */ catch (DivideByZeroException) {

// Перехватить исключение.

Console.WriteLine('Индекс вышел за границы массива!');

}

Console.WriteLine('После блока перехвата исключения.');

}

}

Вот к какому результату приводит выполнение этой программы.

До генерирования исключения.

nums[0]: О

nums[1]: 1

nums[2]: 2

nums[3]: 3

Необработанное исключение: System.IndexOutOfRangeException:

Индекс находился вне границ массива в ExcTypeMismatch.Main() в <имя_файла>:строка 18

Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

Вы можете отметить интересные вам фрагменты текста, которые будут доступны по уникальной ссылке в адресной строке браузера.

Отметить Добавить цитату