我在我的代碼中定義了以下枚舉:枚舉組合和位運算符
[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
甚至自定義結構?
老實說,我不知道你想達到什麼樣的這裏。 – Oded
我希望能夠使用枚舉進行語法分析(使用一組定義的符號)。這意味着Symbol.A和Symbol.B可以用來構造一個在'Production'枚舉中定義的單詞。但是我提出的實現不允許構建'Production.BA'。希望能清楚一點。 – MonkeyCoder
附註:用[Flags]裝飾的Enums應該是複數形式。正常的枚舉應該是單數化的。 SO參考http://stackoverflow.com/questions/1405851/enum-naming-convention-plural – Silvermind