当未找到预期的自定义属性时,我在选择正确类型的异常时遇到了一些麻烦(我更喜欢现有的 .NET 异常之一)。
在这种情况下你有什么建议?提前致谢。
编辑:
这是他的上下文:
[<ExpectedAttribute()>]
let foo args ... = ...
该函数foo
(用户定义)被传递给运行时引擎。如果自定义属性不存在,运行时必须抛出异常。
当未找到预期的自定义属性时,我在选择正确类型的异常时遇到了一些麻烦(我更喜欢现有的 .NET 异常之一)。
在这种情况下你有什么建议?提前致谢。
编辑:
这是他的上下文:
[<ExpectedAttribute()>]
let foo args ... = ...
该函数foo
(用户定义)被传递给运行时引擎。如果自定义属性不存在,运行时必须抛出异常。
如果缺少自定义属性,它将不适合System
异常。
您可以使用系统异常,但您的域是什么?什么样的合同被打破了?这是关于序列化或测试还是......
添加后编辑foo
:与系统异常最接近的是 System.ArgumentException ,因为您的引擎正在接收不符合其要求的参数。
但我会定义我自己的MissingExpectedAttribute
例外。
我会建议像“InvalidOperationException”或“InvalidArgumentException”这样的通用内容,并将有关预期属性的详细信息放入消息中。
如果调用的构造函数、方法或属性被赋予了违反规则的对象,则 ArgumentException。如果违反规则的对象是您之前操作的状态的一部分,那么坚持存在此属性的方法或属性被调用,InvalidOperation。