Если у меня есть следующее, действительно для какой-либо строки, где Вы проверяете IsNullOrEmpty, и это поднимается пустой, какой тип исключительной ситуации нужно бросить, и это не аргумент методу?
Мне всегда нелегко выбирать типы исключительной ситуации, потому что существует, так прокляните многих из них. И это просто захватывает значение от web.config и проверяет если SandboxSoapApiUsername, возвращенный пустой.
if(string.IsNullOrEmpty(ConfigUtility.SandboxSoapApiUsername))
throw new WTF do I throw here??? ahhh
Это, вероятно, зависит от права использования/контекста? Хорошо я буду использовать строку, возвращенную для установки класса частное поле. Таким образом, я должен проверить, является ли это пустая строка рано в процессе, а не позже (а не полагайтесь на другой код для проверки свойства, связанного с частным полем, я установлю ConfigUtility. SandboxSoapApiUsername к).
Начиная со свойств в этом классе, что я устанавливаю каждый ConfigUtility. MEthodName к будет используемым в запросе SOAP, что я думал, возможно, что UriFormatException будет соответствующим здесь даже при том, что это не Uri?
Это зависит, когда строка исходит от. Аргумент может привести к аргументу. Конфигурация может выбросить конфигурациюException (что, похоже, применимо к этому случаю). Или вы можете, конечно, в любом случае создать свой собственный.
Методы в .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");
Вам нужна исключение InvalidConfiguration - определить один
throw new InvalidConfigurationException("Must supply user name")
Если его передан как аргумент, бросить ArgumentNeLLException .
В противном случае это действительно зависит от того, что строка нулевая
означает в контексте вашего приложения. Не бойтесь определить пользовательские типы исключений, если в базовой рамки для сценария нечего.
Так как кажется, что-то не настроено правильно, я бы предложил System.configuration.configurationErrorSexception .
Примечание: не используйте System.configuration.configurationException . Это старая версия и была устарена.
Примечание 2: Хотя я на 90% уверен, что мы имеем дело с отсутствующим значением конфигурации, если это параметр метода, который отсутствует, бросает ArgumentException или ArgumentOutofrangeexception .
Если его пропущено как аргумент, брось ArgumentNullexception .
В противном случае он действительно зависит от того, что представляет собой строку NULL
означает в контексте вашего приложения. Не бойтесь определить пользовательские типы исключений, если в базовой рамки для сценария нечего.
Вы действительно потратите большую часть времени, выбирая из приведенного ниже списка, когда бросаете новое
исключение (в отличие от простого броска
).
1)
Это, вероятно, не имеет смысла, если только вы не выбираете настройку из app.config или web.config:
Исключение ConfigurationException выбрасывается, если приложение пытается для чтения или записи данных в файл конфигурации, но есть безуспешно. Некоторые возможные причины для этого может включать некорректный XML в файл конфигурации, файл вопросы разрешений и конфигурации свойства со значениями, которые не Действительно.
2)
Это не аргумент, чтобы в этом не было смысла.
3)
Это лучшее из трех, так как объект будет в недействительном состоянии. Однако, в зависимости от того, насколько большим является ваш набор конфигурационных настроек, я бы предпочел сделать свое собственное исключение, производное от System.Exception
.
Есть две школы размышлений, которые можно вывести из - *. Два разных разработчика из команды разработчиков фреймворка выразили различные взгляды, от которых, по их мнению, вам следует унаследовать, я придерживаюсь взгляда Джеффри Рихтера. System.Exception
и ApplicationException
Если всё вышеизложенное звучит как woffle, то вы можете просто выбрать из списка , который, по вашему мнению, является наиболее релевантным.
*Похоже, MSDN теперь согласна со своими разработчиками фреймворка, что ApplicationException был ошибкой проектирования