Visual Studio Watch Window:将整数视为一系列标志

时间:2014-06-10 23:12:32

标签: visual-studio visual-studio-2012

我正在使用某种格式化标记的方式查看代码库:

enum eFlags
{
    e_FirstFlag = 0,
    e_SecondFlag = 1,
    e_ThirdFlag = 2,
    e_FourthFlag = 3,
}

其中每个标志的值表示应该翻转以打开该标志的位。因此long myFlags = 9; = 2 ^ 3 + 2 ^ 0 = e_FourthFlage_FirstFlag被翻转。

当我调试此代码时,我并不关心myFlags = 9。将myFlags,b放在观察窗口中以获取0b1001会更好,但我希望观察窗口显示myFlags = e_FirstFlag | e_FourthFlag。如果我在观察窗口中输入(eFlags)myFlags,如果存在e_TenthFlag,则会给出myFlags = 9(因为那将是= 9),或者它只会说{{1}}。

观察窗口can do my desired behavior if the enum values are powers of two,但这些枚举不是2的权力,我无法改变它们。

有没有办法让这个标志可视化?

1 个答案:

答案 0 :(得分:0)

由于您的枚举值,这似乎不可能:如果myFlags的值为3,那么这可能是e_SecondFlag | e_ThirdFlage_FourthFlag,两者都会返回3

凭借2的权力,你不会遇到这个问题,因为每个价值只能以一种方式组成。

您必须切换到2的权力或对您拥有的内容保持满意。

void Main()
{
    var flags = Flags.FourthFlag;
    Console.WriteLine ((int) flags);

    flags = Flags.SecondFlag | Flags.ThirdFlag;
    Console.WriteLine ((int) flags);
}

enum Flags
{
    FirstFlag = 0,
    SecondFlag = 1,
    ThirdFlag = 2,
    FourthFlag = 3,
}

输出:

  

3
  3

事实上,文章本身已经解释了这一点。

  

此功能专门用于显示功能为2的位标志名称。只要枚举包含其值不符合此要求的成员,可视化就不会起作用,因为调试器无法以单一方式解释任意数值(即那些不是2的幂)。