我的枚举:
[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属性解析枚举吗?
答案 0 :(得分: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
}
Like
解析为LessThan | GreaterThan
的原因是因为您已定义它,LessThan
的值为2,而GreaterThan
的值为4.如果您使用按位 - 或者这些,你最终得到LessThan | GreaterThan = 6
。但是,看看,Like
的值为6
,因为您已经定义了枚举!所以,它确实解析了“正确”。
我会坦率地告诉你,但我没有看到用Flags
标记这个枚举的重点。 Flags
的要点是,您可以对枚举值执行按位运算。为什么你认为你需要对这个枚举的值进行按位运算?
答案 1 :(得分:1)
在你的情况下:
GreaterThan
等于6。
LessThan
等于2和
GreaterThan
4。
因此:GreaterThan = 6 = 110b = 2 + 4 = LessThan + GreaterThan。