Книга: ЯЗЫК ПРОГРАММИРОВАНИЯ С# 2005 И ПЛАТФОРМА .NET 2.0. 3-е издание

Свойство Data

Свойство Data

Свойство Data объекта System.Exception является новым в .NET 2.0 и позволяет добавить в объект исключения дополнительную информацию для пользователя (например, штамп времени или что-то другое). Свойство Data возвращает объект, реализующий интерфейс с именем IDictionary, определенный в пространстве имен System.Collection. Роль программирования интерфейсов, как и пространство имен System.Collection, рассматриваются в следующей главе. Сейчас же будет достаточно заметить, что коллекции словарей позволяют создавать множества значений, возвращаемых по значению ключа. Рассмотрите, например, следующую модификацию метода Car.Accelerate().

public void Accelerate(int delta) {
 if (carIsDead) Console.WriteLine("{0} не работает…", petName);
 else {
  currSpeed += delta;
  if (currSpeed ›= maxSpeed) {
   carIsDead = true;
   currSpeed = 0;
   // Чтобы вызвать свойство HelpLink, перед оператором,
   // генерирующим объект Exception, создается локальная переменная.
   Exception ex = new Exception(string.Format("{0} перегрелся!", petName));
   ex.HelpLink = "http://www.CarsRUs.com";
   // Место для пользовательских данных с описанием ошибки.
   ex.Data.Add("Дата и время", string.Format("Автомобиль сломался {0}", DateTime.Now));
   ex.Data.Add("Причина", " У вас тяжелая нога");
   throw ex;
  } else Console.WriteLine("=› CurrSpeed = {0}", currSpeed);
 }
}

Чтобы не возникло проблем при определении пар "ключ-значение", с помощью директивы using следует указать пространство имен System.Collection, поскольку в файле, содержащем класс с реализацией метода Main(), мы собираемся использовать тип DictionaryEntry.

using System.Collections;

Затем нужно обновить программную логику catch для проверки того, что значение, возвращаемое свойством Data, не равно null (значение null задается по умолчанию). После этого мы используем свойства Key и Value типа DictionaryEntry, чтобы вывести пользовательские данные на консоль.

catch (Exception e) {
 …
 // По умолчанию поле данных пусто, поэтому проверяем на null.
 Console.WriteLine("n-› Пользовательские данные:");
 if (e.Data != null) {
  foreach (DictionaryEntry de in e.Data) Console.WriteLine("-› {0}; {1}", de.Key, de.Value);
 }
}

С этими изменениями мы должны получить вывод, показанный на рис. 6.4.


Рис. 6.4. Получение пользовательских данных

Исходный код. Проект SimpleException размещен в подкаталоге, соответствующем главе 6.

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


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