Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 缺少自定义属性时选择正确的异常类型_.net_Exception Handling_Custom Attributes - Fatal编程技术网

.net 缺少自定义属性时选择正确的异常类型

.net 缺少自定义属性时选择正确的异常类型,.net,exception-handling,custom-attributes,.net,Exception Handling,Custom Attributes,当未找到预期的自定义属性时(我更喜欢现有的.NET异常之一),我很难选择要抛出的异常类型 在这种情况下,你有什么建议?提前谢谢 编辑: 以下是他的背景: [<ExpectedAttribute()>] let foo args ... = ... [] 让foo args…=。。。 函数foo(用户定义)被传递给运行时引擎。如果自定义属性不存在,则运行时必须抛出异常。如果缺少自定义属性,则该属性将不适合系统异常 您可以使用系统异常,但您的域是什么?什么样的合同被打破了?这与序列化

当未找到预期的自定义属性时(我更喜欢现有的.NET异常之一),我很难选择要抛出的异常类型

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

编辑:

以下是他的背景:

[<ExpectedAttribute()>]
let foo args ... = ...
[]
让foo args…=。。。
函数
foo
(用户定义)被传递给运行时引擎。如果自定义属性不存在,则运行时必须抛出异常。

如果缺少自定义属性,则该属性将不适合
系统
异常

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


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


但是我会定义我自己的
missingeexpectedattribute
异常

我建议使用“InvalidOperationException”或“InvalidArgumentException”之类的常规方法,并将有关预期属性的详细信息放入消息中。

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

请提供更多上下文-将在哪里引发异常?它与参数相关吗?
InvalidOperationException
是合适的,但
InvalidArgumentException
不是,
ArgumentException
和子类型被明确定义为关于方法参数验证。两者都不够具体,但您是对的,InvalidOperation更接近。自定义异常可能是最好的解决方案。