Важно отметить, что за время, прошедшее с того момента, как верхний ответ был помечен как правильный, у Microsoft.AspNetCore.WebUtilities
было значительное обновление версии (от 1.xx до 2.xx).
, если вы создаете против netcoreapp1.1
, вам нужно будет запустить следующее, в котором установлена последняя поддерживаемая версия 1.1.2
:
Install-Package Microsoft.AspNetCore.WebUtilities -Version 1.1.2
Определенные таможенные исключения позволяют Вам выделять различные ошибочные типы для своих операторов выгоды. Общая конструкция для обработки исключений - это:
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 также.
Я сделал длинное сообщение в блоге на этом предмете недавно:
http://blogs.msdn.com/jaredpar/archive/2008/10/20/custom-exceptions-when-should-you-create-them.aspx
затруднение его сводится: Только создайте пользовательское исключение, если одно из следующего будет верно
Таким образом, можно также бросить их сами, и затем поймать их и знать точно , что они имеют в виду.
Также: при создании библиотеки/платформы/API класса часто полезно создать BaseException, которому наследовались другие исключения в коде. Тогда то, когда Ваш код повышает исключения программисты, которые используют его, может быстро знать источник исключения.
Поскольку это может ясно дать понять Ваши намерения, и можно также отследить использования с помощью функциональности IDE. Скажите, что у Вас есть пользовательская система бэкенда по имени "FooBar", и Вы делаете "FooBarDownException", можно отследить использования этого исключения для идентификации любой пользовательской логики, которую содержит приложение, потому что FooBar снижается. Можно принять решение поймать этот определенный тип исключения и проигнорировать других, избежав перегрузок и условной логики в рамках обработчиков исключений. Это - действительно просто другая версия строгого контроля типов. Это также означает, что можно избежать комментариев в коде, потому что исключение имеет имя раскрытия намерения .
Я не уверен, почему "технически", но позволяет, говорят, что у меня есть приложение/веб-сайт, которое использует полномочия. Если у кого-то нет правильного разрешения, его довольно глупое для выдачи Исключения DivideByZero или IOException. Вместо этого я могу создать свой AccessDeniedException, который поможет мне отладить позже.
Это - та же причина, Вы создали бы различные коды выхода для приложения non-.NET: определить различные специализированные ошибки. Как... ConnectionBrokenException
или гм... UserSmellsBadException
... или что-то.
Этот способ, которым можно знать точно, что пошло не так, как надо и действие соответственно. Например, при попытке отправить некоторые данные, и транспортный класс данных бросает ConnectionBrokenException
, можно открыться повторно подключить диалоговое окно и попытаться снова соединиться. Тогда повторно подключить метод бросил бы ConnectionTimeoutException
, если он испытывает таймаут, и можно снова действовать соответственно.
Поскольку Joel записал: Таким образом, можно также бросить их сами, и затем поймать их и знать точно, что они имеют в виду.
, Кроме того, можно добавить определенную информацию о проблеме, чтобы позволить обработчику исключений действовать более точно.
Стандартные исключения.NET не покрывают все плохо, которое может пойти не так, как надо в любом приложении, и при этом они не предназначаются к. Если Ваша программа не очень проста, вероятно, что необходимо будет создать, по крайней мере, несколько пользовательских исключений.
С одной стороны, Исключения реализованы в Библиотеке, не на языке - как они могут создать исключения в библиотеке? Я вполне уверен, Вы не защищаете это, системные библиотеки должны иметь различный ряд правил.
Для другого, на самом деле возможно использовать дерево объектов исключений. Ваши наследованные исключения могут иметь специальные атрибуты, если Вам нравится - они могут использоваться для более сложных вещей, чем они. Я не защищаю, они использоваться в качестве универсальных данных транспортируют механизм или что-либо (хотя они могли быть), но я видел случай, где кто-то реализовал пользовательское решение для входа, которое потребовало специального атрибута на Исключении...
Ваши пользовательские исключения могли содержать флаг, указывающий на специальный режим (возможно, одно высказывание, что необходимо перезапустить JVM), они могли содержать информацию о регистрирующихся уровнях, наборе материала.
Так или иначе, я не защищаю этот материал, я просто говорю, что это возможно. Первый абзац - Вы реальный ответ.
Вы не были должны, если созданный в Исключениях соответственно описывает проблему/исключение. Я не сделал бы свои собственные базовые классы для создания пользовательского ArgumentException
, ArgumentNullException
или InvalidOperationException
.
можно создать собственные исключения и описать ошибку в более высоком уровне. однако, это обычно не помогает так многому в отладке от потребительского класса.
, Если Вы бросаете и ловите исключение сами, пользовательское исключение может быть в порядке.