正在分析Flags属性为的枚举,但未给出预期值

本文关键字:枚举 Flags 属性 | 更新日期: 2023-09-27 18:24:50

我的枚举:

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

正在分析Flags属性为的枚举,但未给出预期值

您还需要指定值:

[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的要点是可以对枚举值执行逐位操作。为什么您认为需要对此枚举的值执行逐位操作?

在您的情况下:CCD_ 14等于6。LessThan等于2CCD_ 16 4。

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