Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание
Свойство TargetSite
Свойство TargetSite
Свойство System.Exception.TargetSite позволяет выяснить дополнительную информацию о методе, генерирующем данное исключение. Как показано в предыдущем варианте метода Main(), при выводе значения TargetSite демонстрируется возвращаемое значение, имя и параметры метода, генерирующего данное исключение. Но TargetSite возвращает не просто строку, а строго типизированный объект System.Reflection.MethodBase. Этот тип содержит подробную информацию о методе, породившем проблему, и том классе, который определяет данный метод. Для иллюстрации обновим предыдущую логику catch так, как показано ниже.
static void Main(string[] args) {
…
// В действительности TargetSite возвращает объект MethodBase.
catch(Exception e) {
Console.WriteLine("n*** Ошибка! ***");
Console.WriteLine("Имя члена: {0}", е.TargetSite);
Console.WriteLine("Класс, определяющий метод: {0}", е.TargetSite.DeclaringType);
Console.WriteLine("Тип члена: {0}", е.TargetSite.MemberType);
Console.WriteLine("Сообщение: {0}", e.Message);
Console.WriteLine("Источник: {0}", e.Source);
}
Console.WriteLine("n*** Выход из обработчика исключений ***");
myCar.Accelerate(10); // Это не ускорит автомобиль.
Consolе.ReadLine();
}
На этот раз вы используете свойство MethodBase.DeclaringType, чтобы определить абсолютное имя класса, сгенерировавшего ошибку (в данном случае это класс SimpleException.Car), и свойство MemberType объекта MethodBase, чтобы идентифицировать тип породившего исключение члена (в том смысле, свойство это или метод). На рис. 6.3 показан обновленный вывод.
Рис 6.3. Получение информации о целевом объекте