Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 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. Получение информации о целевом объекте

Оглавление книги


Генерация: 1.281. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз