我正在使用某种格式化标记的方式查看代码库:
enum eFlags
{
e_FirstFlag = 0,
e_SecondFlag = 1,
e_ThirdFlag = 2,
e_FourthFlag = 3,
}
其中每个标志的值表示应该翻转以打开该标志的位。因此long myFlags = 9;
= 2 ^ 3 + 2 ^ 0 = e_FourthFlag
和e_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的权力,我无法改变它们。
有没有办法让这个标志可视化?
答案 0 :(得分:0)
由于您的枚举值,这似乎不可能:如果myFlags
的值为3
,那么这可能是e_SecondFlag | e_ThirdFlag
或e_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的幂)。