Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.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
C# 应该抛出哪个异常?_C#_Asp.net Mvc_Exception - Fatal编程技术网

C# 应该抛出哪个异常?

C# 应该抛出哪个异常?,c#,asp.net-mvc,exception,C#,Asp.net Mvc,Exception,我编写了一个自定义操作方法选择器属性,它有三个bool属性。这三个值都为false是无效的。其中至少有一个必须为真。当执行IsValidForRequest时,我检查其中至少有一个是true。但如果没有,我应该抛出哪个异常 一些相关代码: public class MyCustomAttribute : ActionMethodSelectorAttribute { public bool Prop1 { get; set; } public bool Prop2 { get;

我编写了一个自定义操作方法选择器属性,它有三个
bool
属性。这三个值都为
false
是无效的。其中至少有一个必须为
。当执行
IsValidForRequest
时,我检查其中至少有一个是
true
。但如果没有,我应该抛出哪个异常

一些相关代码:

public class MyCustomAttribute : ActionMethodSelectorAttribute
{
    public bool Prop1 { get; set; }
    public bool Prop2 { get; set; }
    public bool Prop3 { get; set; }

    public MyCustomAttribute()
    {
        this.Prop1 = true;
        this.Prop2 = true;
        this.Prop3 = true;
    }

    public override bool IsValidForRequest(ControllerContext controllerContext, MethodInfo methodInfo)
    {
        if (controllerContext == null)
        {
            throw new ArgumentNullException("controllerContext");
        }

        // at least one of them must be true
        if (!this.Prop1 && !this.Prop2 && !this.Prop3)
        {
            throw new ?????
        }

        // other codez here
    }
}
属性具有很好的初始化能力,同时还提供属性值,因此我必须在
IsValidForRequest
方法中检查它们

[MyCustom(Prop1 = false, Prop2 = false, Prop3 = false)]

应该引发哪个异常?我可能会引发
InvalidOperationException
,因为该操作对于对象的当前状态无效。

如果这些属性是从用户输入加载的,您可以尝试。。。或者你可以实现你自己的投掷


这实际上取决于这些属性是如何设置的。

使用

throw new Exception("Custom Error Message");

我更喜欢某种
InvalidObjectStateException
,如果有。。。但是
invalidooperationexception
似乎没问题。让我们看看是否还有其他想法。这是.NET库在这种情况下最常使用的异常(例如,当端口未打开时,请参阅SerialPort.ReadChar)。我也会使用
invalidoOperationException
,尽管每次使用它时,我总是想知道是否有更好的方法!根据我的例子。它们不是通过构造函数参数设置的。我的构造函数是无参数的,因为实际上我不需要参数。
ArgumentException
不应该使用,除非问题在于当前方法的参数。“当提供给方法的某个参数无效时引发的异常。”是的,但我实际上是指它们是否来自用户输入或是计算字段或其他内容。异常的类型为程序员(以及随后的用户)提供了出现问题的上下文的概念。因此,属性的含义对于抛出正确的异常类型很重要。不建议抛出基类异常。如果要执行该路径,请声明并引发自定义异常。