Выбор правильного типа исключения, когда пользовательский атрибут отсутствует - PullRequest
3 голосов
/ 15 августа 2010

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

Что вы рекомендуете в этом случае? Заранее спасибо.

Edit:

Здесь его контекст:

[<ExpectedAttribute()>]
let foo args ... = ...

Функция foo (определяемая пользователем) передается в механизм выполнения. Среда выполнения должна выдавать исключение, если пользовательский атрибут отсутствует.

Ответы [ 3 ]

3 голосов
/ 15 августа 2010

Если атрибут custom отсутствует, он не будет соответствовать исключению System.

Вы можете использовать системное исключение, но какой у вас домен? И какой контракт нарушен? Имеет значение, если речь идет о сериализации или тестировании или ...


Редактировать после добавления foo. Самое близкое к вам исключение System - System.ArgumentException, поскольку ваш движок получает параметр, который не соответствует его требованиям.

Но я бы определил свое собственное исключение MissingExpectedAttribute.

2 голосов
/ 15 августа 2010

Я бы предложил что-то общее, например, «InvalidOperationException» или «InvalidArgumentException», и включил в сообщение сведения об ожидаемом атрибуте.

1 голос
/ 15 августа 2010

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

...