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
不应该使用,除非问题在于当前方法的参数。“当提供给方法的某个参数无效时引发的异常。”是的,但我实际上是指它们是否来自用户输入或是计算字段或其他内容。异常的类型为程序员(以及随后的用户)提供了出现问题的上下文的概念。因此,属性的含义对于抛出正确的异常类型很重要。不建议抛出基类异常。如果要执行该路径,请声明并引发自定义异常。