Console.WriteLine("nums[{0}]: {1}", i, nums[i]);
}
Console.WriteLine("He подлежит выводу");
}
}
class UseExcept {
static void Main() {
try {
ExcTest.GenException();
}
catch (IndexOutOfRangeException exc) {
Console.WriteLine("Стандартное сообщение таково: ");
Console.WriteLine(exc); // вызвать метод ToString()
Console.WriteLine("Свойство StackTrace: " + exc.StackTrace);
Console.WriteLine("Свойство Message: " + exc.Message);
Console.WriteLine("Свойство TargetSite: " + exc.TargetSite);
}
Console.WriteLine("После блока перехвата исключения.");
}
}
При выполнении этой программы получается следующий результат.
До генерирования исключения.
nums[0]: 0
nums[1]: 1
nums[2]: 2
nums[3]: 3
Стандартное сообщение таково: System.IndexOutOfRangeException: Индекс находился
вне границ массива.
в ExcTest.genException() в
в UseExcept.Main()в
Свойство StackTrace: в ExcTest.genException()в
в UseExcept.Main()в
Свойство Message: Индекс находился вне границ массива.
Свойство TargetSite: Void genException()
После блока перехвата исключения.
В классе Exception определяются четыре следующих конструктора:
public Exception()
public Exception(string
public Exception(string
protected Exception(System.Runtime.Serialization.Serializationlnfo
Первый конструктор используется по умолчанию. Во втором конструкторе указывается строка InnerException
, определяемого в классе Exception
.) И последний конструктор обрабатывает исключения, происходящие дистанционно, и поэтому требует десериализации.
Следует также заметить, что в четвертом конструкторе класса Exception
типы Serializationlnfo
и StreamingContext
относятся к пространству имен System. Runtime.Serialization.
В пространстве имен System определено несколько стандартных, встроенных исключений. Все эти исключения являются производными от класса SystemException
, поскольку они генерируются системой CLR при появлении ошибки во время выполнения. В табл. 13.1 перечислены некоторые наиболее часто используемые стандартные исключения.
Таблица 13.1. Наиболее часто используемые исключения, определенные в пространстве имен System
Исключение Значение
ArrayTypeMismatchException -
Тип сохраняемого значения несовместим с типом массива
DivideByZeroException -
Попытка деления на нуль
IndexOutOfRangeException -
Индекс оказался за границами массива
InvalidCastException -
Неверно выполнено динамическое приведение типов