【发布时间】:2008-09-02 18:28:16
【问题描述】:
我在下面有一个标志枚举。
[Flags]
public enum FlagTest
{
None = 0x0,
Flag1 = 0x1,
Flag2 = 0x2,
Flag3 = 0x4
}
我无法让 if 语句评估为真。
FlagTest testItem = FlagTest.Flag1 | FlagTest.Flag2;
if (testItem == FlagTest.Flag1)
{
// Do something,
// however This is never true.
}
我怎样才能做到这一点?
【问题讨论】:
-
如果我错了,请纠正我,0是否适合用作标志值?
-
@Roylee: 0 是可以接受的,最好设置一个“无”或“未定义”标志以测试没有设置标志。这绝不是必需的,但这是一个很好的做法。 Leonid 在他的回答中指出了重要的一点。
-
@Roylee Microsoft 实际上建议提供一个值为 0 的
None标志。见msdn.microsoft.com/en-us/library/vstudio/… -
很多人还认为位比较太难读,所以应该避免使用标志集合,你可以只做collection.contains flag
-
你非常接近,除了你必须反转你的逻辑,你需要按位
&运算符进行比较,|就像一个加法:1|2=3,5|2=7,@987654329 @、7&2=2、8&2=0。0计算结果为false,其他所有结果为true。
标签: c# .net enums attributes flags