是否可以向异常添加错误代码?

时间:2017-02-04 08:50:08

标签: c# .net exception exception-handling

在我使用这种方式时抛出异常?

throw new ArgumentException("My message");

但是如果一个mtethod可以抛出ArgumentException有很多原因,我想知道异常的确切原因。

我知道我可以使用它:

throw new ArgumentException("MyParamName", "MyMessage");

但是如果相同的参数有很多理由抛出ArgumentException,这种情况就无济于事了。例如,我在一个具有两个属性的方法中有一个参数,一个需要大于0而另一个小于0.我想在第一个参数不大于0和002时发送错误代码001当第二个参数不小于0.这样。但我不知道是否有可能在异常中设置错误代码。

我可以这样使用:

throw new ArgumentException("My message " + "(001)");

在消息的最后我可以添加错误代码,但我必须搜索子字符串(001)。但我想知道是否会有更好的选择。

它可以创建我自己的异常的另一种方式,但是如果我有一个ArgumentException,我认为创建一个新的异常只是为了拥有错误代码的属性并包含原始异常它只是一点点开销。

所以我的问题是,最好的选择是什么?还有其他解决方案吗?

感谢。

1 个答案:

答案 0 :(得分:4)

您可以使用ErrorCode编写自己的ArgumentException覆盖:

public class ArgumentExceptionEx : ArgumentException
{
    public int ErrorCode { get; }
    public ArgumentExceptionEx(string paramName, int errorCode)
        : base (paramName)    
    {
        ErrorCode = errorCode;
    }
}

之后你可以抛出新的ArgumentExceptionEx ("MyParamName", 1) 或者,如果您有预定义的错误代码,您甚至可以将Enum作为第二个参数。