.net 缺少自定义属性时选择正确的异常类型
当未找到预期的自定义属性时(我更喜欢现有的.NET异常之一),我很难选择要抛出的异常类型 在这种情况下,你有什么建议?提前谢谢 编辑: 以下是他的背景:.net 缺少自定义属性时选择正确的异常类型,.net,exception-handling,custom-attributes,.net,Exception Handling,Custom Attributes,当未找到预期的自定义属性时(我更喜欢现有的.NET异常之一),我很难选择要抛出的异常类型 在这种情况下,你有什么建议?提前谢谢 编辑: 以下是他的背景: [<ExpectedAttribute()>] let foo args ... = ... [] 让foo args…=。。。 函数foo(用户定义)被传递给运行时引擎。如果自定义属性不存在,则运行时必须抛出异常。如果缺少自定义属性,则该属性将不适合系统异常 您可以使用系统异常,但您的域是什么?什么样的合同被打破了?这与序列化
[<ExpectedAttribute()>]
let foo args ... = ...
[]
让foo args…=。。。
函数foo
(用户定义)被传递给运行时引擎。如果自定义属性不存在,则运行时必须抛出异常。如果缺少自定义属性,则该属性将不适合系统
异常
您可以使用系统异常,但您的域是什么?什么样的合同被打破了?这与序列化、测试或
在添加
foo
之后进行编辑:最接近系统异常的是System.ArgumentException,因为您的引擎接收到的参数不符合其要求
但是我会定义我自己的
missingeexpectedattribute
异常 我建议使用“InvalidOperationException”或“InvalidArgumentException”之类的常规方法,并将有关预期属性的详细信息放入消息中。如果调用的构造函数、方法或属性被赋予了违反规则的对象,则ArgumentException。如果违反规则的对象是上一个操作状态的一部分,然后调用了坚持此属性存在的方法或属性,则为InvalidOperation。请提供更多上下文-将在哪里引发异常?它与参数相关吗?InvalidOperationException
是合适的,但InvalidArgumentException
不是,ArgumentException
和子类型被明确定义为关于方法参数验证。两者都不够具体,但您是对的,InvalidOperation更接近。自定义异常可能是最好的解决方案。