使用Flags属性解析枚举不会给出预期值

时间:2013-07-25 13:20:23

标签: c# parsing enums bitwise-operators

我的枚举:

        [Flags]
        public enum EqualityOperator
        {
            Equal,
            NotEqual,
            LessThan,
            LessThanOrEqual,
            GreaterThan,
            GreaterThanOrEqual,
            Like,
            NotLike,
            In,
            NotIn
        }

我的解析代码:

var operatorVal = (EqualityOperator)Enum.Parse(typeof (EqualityOperator), filterInfo[3]);

当我调试时,我可以看到filterInfo[3]"Like"

但是,operatorVal标记为"LessThan | GreaterThan"

我错过了什么?你能不用Flags属性解析枚举吗?

2 个答案:

答案 0 :(得分:5)

您还需要指定值:

[Flags]
public enum EqualityOperator {
    Equal = 0,
    NotEqual = 1,
    LessThan = 2,
    LessThanOrEqual = 4,
    GreaterThan = 8,
    GreaterThanOrEqual = 16,
    Like = 32,
    NotLike = 64,
    In = 128,
    NotIn = 256
 }

Like解析为LessThan | GreaterThan的原因是因为您已定义它,LessThan的值为2,而GreaterThan的值为4.如果您使用按位 - 或者这些,你最终得到LessThan | GreaterThan = 6。但是,看看,Like的值为6,因为您已经定义了枚举!所以,它确实解析了“正确”。

我会坦率地告诉你,但我没有看到用Flags标记这个枚举的重点。 Flags的要点是,您可以对枚举值执行按位运算。为什么你认为你需要对这个枚举的值进行按位运算?

答案 1 :(得分:1)

在你的情况下: GreaterThan等于6。 LessThan等于2和 GreaterThan 4。

因此:GreaterThan = 6 = 110b = 2 + 4 = LessThan + GreaterThan。