【问题标题】:Enum with Hex value basic arithmetic具有十六进制值基本算术的枚举
【发布时间】:2013-07-19 13:24:22
【问题描述】:

假设我们有一个枚举:

public enum SomeEnum
{
     None = 0x0000,
     Value1 = 0x0001,        
     Value2 = 0x0002,
     Value3 = 0x0200
     Defautl = Value1 | Value2
     SomeOtherDefault = Value1 | Value3
}

所以在这种情况下,对于给定的 SomeEnum 类型值,我们如何检查 Value2 是否存在然后切换它(如果未设置则设置,反之亦然)? 给定的值可以是:

tempValue = Value1 | Value3 | Value2

这一定是一件简单的事情,但我不习惯枚举中的十六进制值。

【问题讨论】:

  • @Soner 我没明白你编辑的重点?

标签: c# enums hex


【解决方案1】:

切换它:

myValue ^= Value2;

检查是否有:

if (myValue & Value2 != 0)

【讨论】:

  • 不要检测是否为阳性。对于这些标志,这无关紧要,但一般情况下,标志可以设置符号位。
  • @BenVoigt 正确,已修复。
  • 谢谢^是我要找的接线员!!
【解决方案2】:
int value = tempValue & Value2;
if (value != 0)
{
    // Value2 is set
}

切换

tempValue = tempValue ^ Value2;

或者就像下面的答案一样

tempValue ^= Value2;

【讨论】:

  • 你甚至不需要投射它。他还询问了如何切换它的方法,你知道的。
  • 如果您将其存储在 int 变量中,则确实需要强制转换。你为什么要这么做?
猜你喜欢
  • 2013-03-10
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 2013-10-30
  • 1970-01-01
  • 2013-01-11
  • 2013-01-26
  • 1970-01-01
相关资源
最近更新 更多