1

我的枚举:

        [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 属性解析枚举吗?

4

2 回答 2

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解析为 as的原因LessThan | GreaterThan是因为正如您定义的那样,它LessThan的值为 2 并且GreaterThan值为 4。如果您采用这些按位或,您最终会得到LessThan | GreaterThan = 6. 但是看,Like具有6您定义枚举的价值!因此,它确实“正确”地解析了。

不过,我会坦率地告诉你,我看不出用这个枚举标记的意义Flags​​。的重点Flags是您可以对枚举值进行按位运算。为什么你认为你需要对这个枚举的值进行按位运算?

于 2013-07-25T13:22:50.813 回答
1

在您的情况下: GreaterThan等于 6。 LessThan等于 2 和 GreaterThan4。

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

于 2013-07-25T13:26:23.920 回答