繁体   English   中英

解析带有Flags属性的枚举未提供期望值

[英]Parsing an enum with the Flags attrubute not giving expected value

我的列举:

        [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]
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 | GreaterThan LessThan | GreaterThan是因为如您所定义, LessThan值为2, GreaterThan值为4。如果按位或这些值,最终得到LessThan | GreaterThan = 6 LessThan | GreaterThan = 6 但请注意,定义枚举后, Like的值为6 因此,它确实“正确”地进行了解析。

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

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

因此:大于= 6 = 110b = 2 + 4 =小于+大于。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM