按位将两个if连接成一个

时间:2011-05-17 03:14:25

标签: c# enums bit-manipulation

我有这个,

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;

但它不起作用。我忘记了什么?

3 个答案:

答案 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