Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Конфигурирование состояние исключенийСодержание книги
Поиск на нашем сайте
В классе Exception доступно множество дополнительных членов (TargetSite, StackTrace, HelpLink и Data), которые могут помочь еще больше уточнить природу проблемы. Давайте рассмотрим возможности каждого из этих членов более подробно.
Свойство TargetSite ― свойство System.Exception.TargetSite позволяет получать различные детали о методе, в котором было сгенерировано данное исключение. Вывод значения свойства TargetSite приводит к отображению возвращаемого значения, имени и параметров выдавшего исключение метода. Вместо простой строки свойство TargetSite возвращает строго типизированный объект System.Reflection.MethodBase. Объект такого типа может применяться для сбора многочисленных деталей, связанных с проблемным методом, а также классом, в котором он содержится. Свойство StackTrace ― свойство System.Exception.StackTrace позволяет определить последовательность вызовов, которая привела к возникновению исключения. Значение этого свойства никогда самостоятельно не устанавливается — это делается автоматически во время создания исключения. Строка, возвращаемая из StackTrace, отражает последовательность вызовов, которая привела к выдаче данного исключения. Обратите внимание, что самый нижний номер в этой строке указывает на место возникновения первого вызова в последовательности, а самый верхний — на место, где точно находится породивший проблему член. Очевидно, что такая информация очень полезна при выполнении отладки или просмотре журналов в конкретном приложении, поскольку позволяет прослеживать весь путь, приведший к возникновению ошибки. Свойство HelpLink ― хотя свойства TargetSite и StackTrace позволяют программистам понять, почему возникло то или иное исключение, пользователям выдаваемая ими информация мало что дает. Как уже показывалось ранее, для получения удобной для человеческого восприятия и потому пригодной для отображения конечному пользователю информации может применяться свойство System.Exception.Message. Кроме него, также может использоваться свойство HelpLink, которое позволяет направить пользователя на конкретный URL-адрес или стандартный справочный файл Windows, где содержатся более детальные сведения о возникшей проблеме. По умолчанию значением свойства HelpLink является пустая строка. Присваивание этому свойству какого-то более интересного значения должно делаться перед генерацией исключения типа System.Exception. Свойство Data ― доступное в классе System.Exception свойство Data позволяет заполнять объект исключения соответствующей вспомогательной информацией (например, датой и временем возникновения исключения). Оно возвращает объект, реализующий интерфейс по имени IDictionary, который определен в пространстве имен System.Collections. Свойство Data очень полезно, так как позволяет формировать специальную информацию об ошибке, не прибегая к созданию совершенно нового класса, который расширяет базовый класс Exception (до выхода версии .NET 2.0 это было единственным возможным вариантом). Однако каким бы полезным ни было свойство Data, разработчики.NET-приложений все равно довольно часто предпочитают создавать строго типизированные классы исключений, в которых специальные данные обрабатываются с помощью строго типизированных свойств. При таком подходе вызывающий код получает возможность перехватывать конкретный производный от Exception типа, а не углубляться в коллекцию данных в поиске дополнительных деталей.
Пример иллюстрирующий применение вышеуказанных свойств:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Collections;
namespace LC_Console { class Program { static int MyDel(int x, int y) {
if (y == 0) { // Создаем локальную переменную для получения // свойства HelpLink Exception exc = new Exception(); exc.HelpLink = "http://www.microsoft.com"; // Вставка специальных дополнительных данных // имеющих отношение к ошибке exc.Data.Add("Время возникновения: ", DateTime.Now); exc.Data.Add("Причина: ", "Неккоректное значение"); throw exc; } return x / y; }
static void Green() { Console.ForegroundColor = ConsoleColor.Green; }
static void Gray() { Console.ForegroundColor = ConsoleColor.Gray; }
static void Red() { Console.ForegroundColor = ConsoleColor.Red; }
static void Main() { link1:
try { Console.Write("Введите x: "); int x = int.Parse(Console.ReadLine()); Console.Write("Введите y: "); int y = int.Parse(Console.ReadLine());
int result = MyDel(x, y); Console.WriteLine("Результат: " + result); } // Обрабатываем общее исключение catch (Exception ex) { Red(); Console.WriteLine("\n**************\n*** ОШИБКА ***\n**************\n"); Green(); Console.Write("Ошибка: "); Gray(); Console.Write(ex.Message + "\n\n"); Green(); Console.Write("Метод: "); Gray(); Console.Write(ex.TargetSite + "\n\n"); Green(); Console.Write("Вывод стека: "); Gray(); Console.Write(ex.StackTrace + "\n\n"); Green(); Console.Write("Подробности на сайте: "); Gray(); Console.Write(ex.HelpLink + "\n\n"); Green();
if (ex.Data!= null) { Console.WriteLine("Сведения: \n"); Gray(); foreach (DictionaryEntry d in ex.Data) Console.WriteLine("-> {0} {1}",d.Key, d.Value); Console.WriteLine("\n"); } Gray(); goto link1; } Console.WriteLine("Для продолжения нажмите любую клавишу..."); Console.ReadKey(); } } }
Рис. 2. 1. Результат работы кода выше
|
||
|
Последнее изменение этой страницы: 2016-08-15; просмотров: 517; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.217.89 (0.009 с.) |