[英]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.