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

Álv*_*cía 2 .net c# exception-handling exception

要抛出异常,到我使用这种方式的那一刻?

throw new ArgumentException("My message");
Run Code Online (Sandbox Code Playgroud)

但是如果一个方法由于多种原因可以抛出 ArgumentException ,我想知道异常的确切原因。

我知道我可以使用它:

throw new ArgumentException("MyParamName", "MyMessage");
Run Code Online (Sandbox Code Playgroud)

但是如果相同的参数可能有很多原因抛出 ArgumentException,那么这种情况就没有太大帮助。例如,我在一个方法中有一个参数,有两个属性,一个需要大于0,另一个小于0。我想在第一个参数不大于0和002时发送错误代码001当第二个参数不小于0时。这样。但我不知道是否可以在异常中设置错误代码。

我可以这样使用:

throw new ArgumentException("My message " + "(001)");
Run Code Online (Sandbox Code Playgroud)

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

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

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

谢谢。

Mak*_*kin 5

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

public class ArgumentExceptionEx : ArgumentException
{
    public int ErrorCode { get; }
    public ArgumentExceptionEx(string paramName, int errorCode)
        : base (paramName)    
    {
        ErrorCode = errorCode;
    }
}
Run Code Online (Sandbox Code Playgroud)

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