我的代码中定义了以下枚举:
[Flags]
public enum Symbol
{
A,
B,
}
public enum Production
{
AA = Symbol.A | Symbol.A,
AB = Symbol.A | Symbol.B,
BA = Symbol.B | Symbol.A, // <- this will obviously not work
}
我打算使用它们,enums
因为它们最终会阻止不需要Symbols
的用于Productions
. 问题是以下代码不会产生我所追求的输出:
Productions product1 = (Productions) (Symbol.A | Symbol.A); // Production.AA
Productions product2 = (Productions) (Symbol.A | Symbol.B); // Production.AB
Productions product3 = (Productions) (Symbol.B | Symbol.A); // Production.AB (and not Production.BA as I would like)
我完全理解为什么会发生这种情况,但想知道是否可以使用按位运算符的组合使其按我最初的意图工作?
或者一般来说我试图以不正确的方式使用枚举,因此应该切换到chars
甚至自定义结构?