Какой Тип исключительной ситуации бросить для строк

Если у меня есть следующее, действительно для какой-либо строки, где Вы проверяете IsNullOrEmpty, и это поднимается пустой, какой тип исключительной ситуации нужно бросить, и это не аргумент методу?

Мне всегда нелегко выбирать типы исключительной ситуации, потому что существует, так прокляните многих из них. И это просто захватывает значение от web.config и проверяет если SandboxSoapApiUsername, возвращенный пустой.

if(string.IsNullOrEmpty(ConfigUtility.SandboxSoapApiUsername))
        throw new WTF do I throw here??? ahhh

Это, вероятно, зависит от права использования/контекста? Хорошо я буду использовать строку, возвращенную для установки класса частное поле. Таким образом, я должен проверить, является ли это пустая строка рано в процессе, а не позже (а не полагайтесь на другой код для проверки свойства, связанного с частным полем, я установлю ConfigUtility. SandboxSoapApiUsername к).

Начиная со свойств в этом классе, что я устанавливаю каждый ConfigUtility. MEthodName к будет используемым в запросе SOAP, что я думал, возможно, что UriFormatException будет соответствующим здесь даже при том, что это не Uri?

9
задан Patrick Karcher 19 January 2010 в 22:59
поделиться

6 ответов

Это зависит, когда строка исходит от. Аргумент может привести к аргументу. Конфигурация может выбросить конфигурациюException (что, похоже, применимо к этому случаю). Или вы можете, конечно, в любом случае создать свой собственный.

10
ответ дан 4 December 2019 в 07:14
поделиться

Методы в .NET Framework обычно различают NULL и неверное значение, передаваемое для аргумента. Я думаю, что вы должны выбросить нулевое исключение аргумента, если значение равно нулю и исключению аргумента, если он недействителен.

if (arg == null)
    throw new ArgumentNullException("arg", "argcannot be null");
if (arg == string.Empty)
    throw new ArgumentException("arg cannot be an empty string", "arg");

Если значение не является аргументом, но, например, загружено во время инициализации, я думаю, что неверная операция исключения будет уместна:

if (string.IsNullOrEmpty(ConfigUtility.SandboxSoapApiUsername))
    throw new InvalidOperationException("Cannot initialize because " +
                                        "SandboxSoapApiUsername not configured");
11
ответ дан 4 December 2019 в 07:14
поделиться

Вам нужна исключение InvalidConfiguration - определить один

 throw new InvalidConfigurationException("Must supply user name")
4
ответ дан 4 December 2019 в 07:14
поделиться

Если его передан как аргумент, бросить ArgumentNeLLException .

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

-121--3229701-

Так как кажется, что-то не настроено правильно, я бы предложил System.configuration.configurationErrorSexception .

Примечание: не используйте System.configuration.configurationException . Это старая версия и была устарена.

Примечание 2: Хотя я на 90% уверен, что мы имеем дело с отсутствующим значением конфигурации, если это параметр метода, который отсутствует, бросает ArgumentException или ArgumentOutofrangeexception .

0
ответ дан 4 December 2019 в 07:14
поделиться

Если его пропущено как аргумент, брось ArgumentNullexception .

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

1
ответ дан 4 December 2019 в 07:14
поделиться

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

  1. ConfigurationException
    • Исключение, которое выбрасывается при системной ошибке конфигурации.
  2. ArgumentException
    • Исключение, которое выбрасывается, когда один из аргументов, предоставленных методу, недействителен.
  3. InvalidOperationException
    • Исключение, которое бросается при вызове метода, когда один из аргументов, предоставленных методу, является недействительным для текущего состояния объекта.

1)
Это, вероятно, не имеет смысла, если только вы не выбираете настройку из app.config или web.config:

Исключение ConfigurationException выбрасывается, если приложение пытается для чтения или записи данных в файл конфигурации, но есть безуспешно. Некоторые возможные причины для этого может включать некорректный XML в файл конфигурации, файл вопросы разрешений и конфигурации свойства со значениями, которые не Действительно.

2)
Это не аргумент, чтобы в этом не было смысла.

3)
Это лучшее из трех, так как объект будет в недействительном состоянии. Однако, в зависимости от того, насколько большим является ваш набор конфигурационных настроек, я бы предпочел сделать свое собственное исключение, производное от System.Exception.

Есть две школы размышлений, которые можно вывести из - System.Exception и ApplicationException*. Два разных разработчика из команды разработчиков фреймворка выразили различные взгляды, от которых, по их мнению, вам следует унаследовать, я придерживаюсь взгляда Джеффри Рихтера.

Если всё вышеизложенное звучит как woffle, то вы можете просто выбрать из списка , который, по вашему мнению, является наиболее релевантным.

*Похоже, MSDN теперь согласна со своими разработчиками фреймворка, что ApplicationException был ошибкой проектирования

5
ответ дан 4 December 2019 в 07:14
поделиться
Другие вопросы по тегам:

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