Подтвердить что ты не робот

Исключение недостающих данных

Мне было интересно, какое исключение нужно бросить за недостающие данные. Например, если xml node не содержит данных. Было бы легко " выбросить новое исключение (...)", но это не рекомендуется. Другой вариант - создать новый класс исключений, например MissingDataException или InvalidDataException, но не существует встроенного класса исключений для этого случая?

4b9b3361

Ответ 1

Как правило, проверьте существующие исключения .NET framework для подходящего исключения, которое нужно выполнить, прежде чем вывести свой собственный. Чтобы ответить на ваш вопрос напрямую, в настоящее время отсутствует исключение "отсутствующих данных", но это не означает, что для вашего положения не существует подходящих исключений.

В вашем случае может оказаться подходящим скромное InvalidOperationException; это исключение вызывается при вызове метода для объекта, но состояние объекта не подходит для операции. Примеры этого включают методы вызова в закрытом потоке и перечислитель, который прошел конец коллекции. Если данные XML являются внутренним состоянием объекта, а вызов метода обнаружил плохие данные, InvalidOperationException является хорошим кандидатом.

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

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

Ответ 2

Существует также класс System.Data.ObjectNotFoundException, который вы можете рассмотреть.

Ответ 3

Не вызывайте "throw new Exception", потому что вы не знаете, как обрабатывать исключение.

Определите свое собственное исключение. Будьте более конкретными, например XMLDataMissingException. Затем вы можете дать мне полезное сообщение или зарегистрировать его.

Ответ 4

Вы можете использовать System.Xml.XmlException.

Изменить: даже если System.Xml.XmlException может поместиться, я думаю, вы должны определить свое собственное исключение, поскольку это было бы более точно, и вы могли бы описать, какие данные отсутствуют: идентификатор, дата и т.д.

Ответ 5

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

У меня была аналогичная проблема, которую вы описали, в которой у меня было 2 клиента (назовите их A и B), прочитав и изменив один xml файл. Клиент Удаленный node X, тогда клиент B попытался обновить node X. Очевидно, что обновление node, которое больше не существует, является проблемой. Чтобы решить эту проблему, я вдохновился SQL Server, который сообщает количество строк, на которые влияет инструкция UPDATE. В этом конкретном случае я поднял событие UpdateNode как обычно, когда количество строк повлияло на свойство, установленное на ноль.

Ответ 6

выбросить новое исключение ( "мое сообщение" ); (или другое встроенное исключение) часто является правильным подходом. Альтернативой является взрыв классов исключений, которые могут использоваться только один раз.

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