我有以下enum
:问题与枚举为标志
[Flags]
public enum Status { Nominal, Modified, DirOneOnly, DirTwoOnly, DirOneNewest, DirTwoNewest }
我试图看到Modified
位是否已被设置为true,曾尝试以下方法:
if(_stateFlags.HasFlag(Status.Modified))
{
//DoStuff
} //Found out why this doesn't work after reading docs.
和
if((_stateFlags & Status.Modified) == Status.Modified)
{
//DoStuff
}
后者是我进一步研究的方法led我相信会工作。但是,当我做_stateFlags = Status.DirTwoOnly
上述声明仍然似乎评估为true
这真的让我感到困惑。
我在做一些根本性的错误吗?
你给了它[Flags]属性,但枚举没有明确的值。 (int)Status = 3可能是DirTwoOnly或可能是Nominal |改性。你必须给它们编号,使它们不重叠。所以1,2,4,8,16等 –
谢谢@HansPassant我假设他们默认为两个权力。我的错。 –
您可能会考虑是否值得定义自己的结构,该结构仍然占用4个字节,但具有像“IsModified”等自定义方法。必须对位进行位算术以确定其含义,使得应该读取的代码像语义 - “是否修改了状态?“ - 阅读更多的机制 - ”是位数组的第三位开启了吗?“ –