3

当未找到预期的自定义属性时,我在选择正确类型的异常时遇到了一些麻烦(我更喜欢现有的 .NET 异常之一)。

在这种情况下你有什么建议?提前致谢。

编辑:

这是他的上下文:

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

该函数foo(用户定义)被传递给运行时引擎。如果自定义属性不存在,运行时必须抛出异常。

4

3 回答 3

4

如果缺少自定义属性,它将不适合System异常。

您可以使用系统异常,但您的域是什么?什么样的合同被打破了?这是关于序列化或测试还是......


添加后编辑foo:与系统异常最接近的是 System.ArgumentException ,因为您的引擎正在接收不符合其要求的参数。

但我会定义我自己的MissingExpectedAttribute例外。

于 2010-08-15T12:31:22.487 回答
3

我会建议像“InvalidOperationException”或“InvalidArgumentException”这样的通用内容,并将有关预期属性的详细信息放入消息中。

于 2010-08-15T12:35:23.990 回答
1

如果调用的构造函数、方法或属性被赋予了违反规则的对象,则 ArgumentException。如果违反规则的对象是您之前操作的状态的一部分,那么坚持存在此属性的方法或属性被调用,InvalidOperation。

于 2010-08-15T12:35:58.730 回答