C#:枚举的默认值是None还是Unknown?

bwe*_*rks 9 c# enums default-value

假设您有一个表示错误代码的枚举.将有几个代码,每个代码都有自己的底层int值; 但是,获取默认值0的枚举值似乎应该仔细考虑.

在错误代码枚举的情况下,我可以想到两个特殊值:无(对于没有错误的情况)和未知(对于没有现有错误代码的情况,或者甚至当错误状态不能被发现).

其中一个值似乎应该为0,其他值可能会得到其他类似-1的值.将None值设置为0或将Unknown值设置为0更合适吗?

public enum ErrorCode
{
    None = -1,
    Unknown = 0,
    InsufficientPermissions,
    ConnectivityError,
    ...
}

public enum ErrorCode
{
    Unknown = -1,
    None = 0,
    InsufficientPermissions,
    ConnectivityError,
    ...
}
Run Code Online (Sandbox Code Playgroud)

我的直觉告诉我默认应该是未知,但我很好奇是否有人做了不同的事情.

Pon*_*gge 15

由于您使用最佳实践标记了您的问题:在可以使用例外时不要使用错误代码.

  • 您可以使用异常和错误代码来消除歧义,并提供引用文档中特定错误的方法. (4认同)
  • 错误不一定是特殊情况.错误代码可能是Validate方法的返回值. (3认同)

Joã*_*elo 6

在我看来,在枚举的上下文中,两者UnknownNone意思相同ErrorCode.我的理由是,如果我正在检查错误代码而不是因为我已经有错误了.

我还认为错误代码枚举仅在自定义异常或现有异常类型的自定义数据中有用,并且在这两种情况下,您总是会出错.


pra*_*net 5

绝对不是一个好习惯。但如果没有其他办法......那么我通常会选择第二个选项:

public enum ErrorCode 
{ 
    Unknown = -1, 
    None = 0, 
    InsufficientPermissions, 
    ConnectivityError, 
    ... 
} 
Run Code Online (Sandbox Code Playgroud)

0 符合“无错误”约定,-1 很好,因为理解存在一些错误(可能是未知的)。

  • 感谢您根据惯例回答问题,而不是因为它有多糟糕而分心。 (2认同)