Жанры книг
Мы в соц.сетях
ParaKnig📚 » Компьютеры и Интернет » Базы данных » Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю
<< На главную

Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Читать онлайн Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю

Шрифт:

-
+

Интервал:

-
+

Закладка:

Сделать
1 ... 152 153 154 155 156 157 158 159 160 ... 642
Перейти на страницу:

Member type: Method

Message: Zippy has overheated!

Source: SimpleException

Свойство StackTrace

Свойство System.Exception.StackTrace позволяет идентифицировать последовательность вызовов, которая в результате привела к генерации исключения. Значение данного свойства никогда не устанавливается вручную — это делается автоматически во время создания объекта исключения. Чтобы удостовериться в сказанном, модифицируйте логику в блоке catch:

catch(Exception e)

{

  ...

  Console.WriteLine(&quot;Stack: {0}&quot;, e.StackTrace);

}

Снова запустив программу, в окне консоли можно обнаружить следующие данные трассировки стека (естественно, номера строк и пути к файлам у вас могут отличаться):

Stack: at SimpleException.Car.Accelerate(Int32 delta)

in [путь к файлу]car.cs:line 57 at &lt;Program&gt;$.&lt;Main&gt;$(String[] args)

in [путь к файлу]Program.cs:line 20

Значение типа string, возвращаемое свойством StackTrace, отражает последовательность вызовов, которая привела к генерации данного исключения. Обратите внимание, что самый нижний номер строки в string указывает на место возникновения первого вызова в последовательности, а самый верхний — на место, где точно находится проблемный член. Очевидно, что такая информация очень полезна во время отладки или при ведении журнала для конкретного приложения, т.к. дает возможность отследить путь к источнику ошибки.

Свойство HelpLink

Хотя свойства TargetSite и StackTrace позволяют программистам выяснить, почему возникло конкретное исключение, информация подобного рода не особенно полезна для пользователей. Как уже было показано, с помощью свойства System.Exception. Message можно извлечь читабельную информацию и отобразить ее конечному пользователю. Вдобавок можно установить свойство HelpLink для указания на специальный URL или стандартный справочный файл, где приводятся более подробные сведения о проблеме.

По умолчанию значением свойства HelpLink является пустая строка. Обновите исключение с использованием инициализации объектов, чтобы предоставить более интересное значение. Ниже показан модифицированный код метода Car.Accelerate():

public void Accelerate(int delta)

{

  if (_carIsDead)

  {

    Console.WriteLine(&quot;{0} is out of order...&quot;, PetName);

  }

  else

  {

    CurrentSpeed += delta;

    if (CurrentSpeed &gt;= MaxSpeed)

    {

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      CurrentSpeed = 0;

      _carIsDead = true;

      // Использовать ключевое слово throw для генерации.

      // исключения и возврата в вызывающий код

      throw new Exception($&quot;{PetName} has overheated!&quot;)

      {

        HelpLink = &quot;http://www.CarsRUs.com&quot;

      };

    }

    Console.WriteLine(&quot;=&gt; CurrentSpeed = {0}&quot;, CurrentSpeed);

  }

}

Теперь можно обновить логику в блоке catch для вывода на консоль информации из свойства HelpLink:

catch(Exception e)

{

  ...

  Console.WriteLine(&quot;Help Link: {0}&quot;, e.HelpLink);

}

Свойство Data

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

public void Accelerate(int delta)

{

  if (_carIsDead)

  {

    Console.WriteLine(&quot;{0} is out of order...&quot;, PetName);

  }

   else

  {

    CurrentSpeed += delta;

    if (CurrentSpeed &gt;= MaxSpeed)

    {

(window.adrunTag = window.adrunTag || []).push({v: 1, el: 'adrun-4-390', c: 4, b: 390})

      Console.WriteLine(&quot;{0} has overheated!&quot;, PetName);

      CurrentSpeed = 0;

      _carIsDead = true;

      // Использовать ключевое слово throw для генерации

      // исключения и возврата в вызывающий код.

      throw new Exception($&quot;{PetName} has overheated!&quot;)

1 ... 152 153 154 155 156 157 158 159 160 ... 642
Перейти на страницу:
На этой странице вы можете бесплатно читать книгу Язык программирования C#9 и платформа .NET5 - Троелсен Эндрю бесплатно.
Комментарии
Открыть боковую панель
Комментарии
Лариса
Лариса 11.03.2026 - 20:17
Странно,здесь имя девочки Аграфена,а на других сайтах я прослушала три книги этого цикла с именем Дарвина.Зачем менять имя и путать читателей? Опечатка- не Дарвина,  а  Дарина.
Григорий
Григорий 09.04.2025 - 22:24
Лучшая книга всех времен
Женя
Женя 02.04.2025 - 16:08
Любимая книга