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

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

Пример

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

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

Комментарии

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