C#中的枚举使用负数的负面影响

AJM*_*AJM 24 c#

在C#枚举中,使用负数是否有任何负面影响?

我正在建模响应代码,其中一个代码为负数.这编译,但我想知道是否有任何负面影响.

public enum ResponseCodes
{
    InvalidServerUserPasswordCombo = -1,

    // etc.
}
Run Code Online (Sandbox Code Playgroud)

Ric*_*ard 30

使用负数的负面影响

显然,对于任何底层签名类型,任何按位操作都会很快变得"有趣".

但是使用枚举作为相关常量的集合可以非常愉快地使用负值.

  • 没有`[Flags]`的`enum`不太可能用于按位运算(当然,它不是禁止的). (5认同)
  • 如果您使用`[Flags]`,-1 是一个方便的快捷方式来引用*所有标志*。如果您执行`public enum Things{Thing1 = 1, Thing2 = 1<<1, All = ~0}`,通过编写“否定零”,您实际上是在指定所有标志(即使是您尚未指定的标志)设置。~0 的值为 -1。所以有一个例子,如果你使用标志和负数,你会遇到奇怪的问题。(虽然理解 OP 没有使用标志) (4认同)
  • @Tigran 不正确,您可以在枚举中拥有一个值,该值是多个其他标志的预组合名称。使用 或 组合可以实现这一点。 (2认同)
  • @理查德:您的假设是不正确的。而是检查该枚举:“枚举测试{A = 1,B = 2,C = 3,D = 4,全部= 5}”。将其分配给枚举变量All,您将看到All可能是B | C **或** A | D`。您不能以唯一的方式理解枚举值的内容。取而代之的是,如果值是2的幂,则在数学上是精确的。 (2认同)

Sim*_*ead 12

没有负面的副作用,但请记住,在这个实例中枚举被初始化为零:

class YourClass {
    public ResponseCodes ResponseCode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

提供负面的将对该类的任何用户产生不希望的影响(除非他们初始化它.


小智 5

这个答案晚了 7 年,但我还没有在其他地方看到过这个观点。

使用负数进行枚举时会产生轻微的负面影响。如果要将负数转换为枚举,则需要确保该数字位于括号中以避免编译错误,例如:

class YourClass {
    ResponseCodes rc = (ResponseCodes)(-1);
}
Run Code Online (Sandbox Code Playgroud)