コードで次の列挙型を定義しています。
[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
か、さらにはカスタム構造体に切り替える必要がありますか?