正在分析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]
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。