我有这个,
public enum Condition : uint // bitwise
{
None = 0,
NewLine = 1,
Space = 2
}
Rule.Condition someCondition = Rule.Condition.Space | Rule.Condition.NewLine;
我想转换它,
if ((Rule.Condition.Space & condition) == Rule.Condition.Space) return true;
if ((Rule.Condition.NewLine & condition) == Rule.Condition.NewLine) return true;
等等,
if((someCondition & condition) == someCondition) return true;
但它不起作用。我忘记了什么?
答案 0 :(得分:6)
好吧,如果您只想测试无,请检查> 0
。但是,如果你正在寻找一个不太具体的解决方案,那么这样的结合将两者结合起来并完全删除if
:
return (int)(someCondition & (Condition.Space | Condition.NewLine)) > 0
答案 1 :(得分:3)
.NET4中有一种特殊的便捷方法HasFlag
,专门用于此目的:
if (condition.HasFlag(someCondition)) return true;
这是文档:
答案 2 :(得分:2)
someCondition
设置了两位,一位用于Rule.Condition.Space
,另一位用于Rule.Condition.NewLine
。如果someCondition & condition
为空格或新线,condition
将设置一位,否则为0
。
您应该测试按位操作是否返回0
而不是检查与someCondition
if ((someCondition & condition) != 0) return true