Почему создают пользовательские исключения? [закрытый]

Важно отметить, что за время, прошедшее с того момента, как верхний ответ был помечен как правильный, у Microsoft.AspNetCore.WebUtilities было значительное обновление версии (от 1.xx до 2.xx).

, если вы создаете против netcoreapp1.1, вам нужно будет запустить следующее, в котором установлена ​​последняя поддерживаемая версия 1.1.2:

Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2

56
задан Servy 7 December 2015 в 19:09
поделиться

10 ответов

Определенные таможенные исключения позволяют Вам выделять различные ошибочные типы для своих операторов выгоды. Общая конструкция для обработки исключений - это:

try
{}
catch (Exception ex)
{}

Это ловит весь исключения независимо от типа. Однако, если у Вас есть пользовательские исключения, у Вас могут быть отдельные обработчики для каждого типа:

try
{}
catch (CustomException1 ex1)
{
    //handle CustomException1 type errors here
}
catch (CustomException2 ex2)
{
    //handle CustomException2 type errors here
}
catch (Exception ex)
{
    //handle all other types of exceptions here
}

Следовательно, определенные исключения позволяют Вам более прекрасный уровень управления Вашей обработкой исключений. Это преимущество совместно используется не только пользовательскими исключениями, но и всеми другими типами исключительной ситуации в системных библиотеках.NET также.

55
ответ дан Jon Limjap 26 November 2019 в 17:11
поделиться

Я сделал длинное сообщение в блоге на этом предмете недавно:

http://blogs.msdn.com/jaredpar/archive/2008/10/20/custom-exceptions-when-should-you-create-them.aspx

затруднение его сводится: Только создайте пользовательское исключение, если одно из следующего будет верно

  1. , то Вы на самом деле ожидаете, что кто-то обработает его.
  2. Вы хотите зарегистрировать информацию о конкретной ошибке
40
ответ дан Cory House 26 November 2019 в 17:11
поделиться

Таким образом, можно также бросить их сами, и затем поймать их и знать точно , что они имеют в виду.

Также: при создании библиотеки/платформы/API класса часто полезно создать BaseException, которому наследовались другие исключения в коде. Тогда то, когда Ваш код повышает исключения программисты, которые используют его, может быстро знать источник исключения.

19
ответ дан Joel Coehoorn 26 November 2019 в 17:11
поделиться

Поскольку это может ясно дать понять Ваши намерения, и можно также отследить использования с помощью функциональности IDE. Скажите, что у Вас есть пользовательская система бэкенда по имени "FooBar", и Вы делаете "FooBarDownException", можно отследить использования этого исключения для идентификации любой пользовательской логики, которую содержит приложение, потому что FooBar снижается. Можно принять решение поймать этот определенный тип исключения и проигнорировать других, избежав перегрузок и условной логики в рамках обработчиков исключений. Это - действительно просто другая версия строгого контроля типов. Это также означает, что можно избежать комментариев в коде, потому что исключение имеет имя раскрытия намерения .

11
ответ дан krosenvold 26 November 2019 в 17:11
поделиться

Я не уверен, почему "технически", но позволяет, говорят, что у меня есть приложение/веб-сайт, которое использует полномочия. Если у кого-то нет правильного разрешения, его довольно глупое для выдачи Исключения DivideByZero или IOException. Вместо этого я могу создать свой AccessDeniedException, который поможет мне отладить позже.

3
ответ дан masfenix 26 November 2019 в 17:11
поделиться

Это - та же причина, Вы создали бы различные коды выхода для приложения non-.NET: определить различные специализированные ошибки. Как... ConnectionBrokenException или гм... UserSmellsBadException... или что-то.

Этот способ, которым можно знать точно, что пошло не так, как надо и действие соответственно. Например, при попытке отправить некоторые данные, и транспортный класс данных бросает ConnectionBrokenException, можно открыться повторно подключить диалоговое окно и попытаться снова соединиться. Тогда повторно подключить метод бросил бы ConnectionTimeoutException, если он испытывает таймаут, и можно снова действовать соответственно.

3
ответ дан lc. 26 November 2019 в 17:11
поделиться

Поскольку Joel записал: Таким образом, можно также бросить их сами, и затем поймать их и знать точно, что они имеют в виду.

, Кроме того, можно добавить определенную информацию о проблеме, чтобы позволить обработчику исключений действовать более точно.

2
ответ дан Serge Wautier 26 November 2019 в 17:11
поделиться

Стандартные исключения.NET не покрывают все плохо, которое может пойти не так, как надо в любом приложении, и при этом они не предназначаются к. Если Ваша программа не очень проста, вероятно, что необходимо будет создать, по крайней мере, несколько пользовательских исключений.

1
ответ дан mhenry1384 26 November 2019 в 17:11
поделиться

С одной стороны, Исключения реализованы в Библиотеке, не на языке - как они могут создать исключения в библиотеке? Я вполне уверен, Вы не защищаете это, системные библиотеки должны иметь различный ряд правил.

Для другого, на самом деле возможно использовать дерево объектов исключений. Ваши наследованные исключения могут иметь специальные атрибуты, если Вам нравится - они могут использоваться для более сложных вещей, чем они. Я не защищаю, они использоваться в качестве универсальных данных транспортируют механизм или что-либо (хотя они могли быть), но я видел случай, где кто-то реализовал пользовательское решение для входа, которое потребовало специального атрибута на Исключении...

Ваши пользовательские исключения могли содержать флаг, указывающий на специальный режим (возможно, одно высказывание, что необходимо перезапустить JVM), они могли содержать информацию о регистрирующихся уровнях, наборе материала.

Так или иначе, я не защищаю этот материал, я просто говорю, что это возможно. Первый абзац - Вы реальный ответ.

0
ответ дан Bill K 26 November 2019 в 17:11
поделиться

Вы не были должны, если созданный в Исключениях соответственно описывает проблему/исключение. Я не сделал бы свои собственные базовые классы для создания пользовательского ArgumentException, ArgumentNullException или InvalidOperationException.

можно создать собственные исключения и описать ошибку в более высоком уровне. однако, это обычно не помогает так многому в отладке от потребительского класса.

, Если Вы бросаете и ловите исключение сами, пользовательское исключение может быть в порядке.

0
ответ дан Øyvind Skaar 26 November 2019 в 17:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: