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

Fio*_*ite 1 c# enums parsing bitwise-operators

我的枚举:

        [Flags]
        public enum EqualityOperator
        {
            Equal,
            NotEqual,
            LessThan,
            LessThanOrEqual,
            GreaterThan,
            GreaterThanOrEqual,
            Like,
            NotLike,
            In,
            NotIn
        }
Run Code Online (Sandbox Code Playgroud)

我解析它的代码:

var operatorVal = (EqualityOperator)Enum.Parse(typeof (EqualityOperator), filterInfo[3]);
Run Code Online (Sandbox Code Playgroud)

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

但是,operatorVal出来了"LessThan | GreaterThan"

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

jas*_*son 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
 }
Run Code Online (Sandbox Code Playgroud)

Like解析的原因LessThan | GreaterThan是因为你已经定义了它,LessThan它的值为2且GreaterThan值为4.如果你采用按位或者这些,你最终会得到LessThan | GreaterThan = 6.但是看,Like6你定义你的枚举的价值!所以,它确实解析了"正确".

不过我会坦率地告诉你,虽然我没有看到标记这个枚举的重点Flags.关键Flags是你可以对枚举值进行按位运算.为什么你认为你需要对这个枚举的值进行按位运算?