フラグ/ビット単位の操作を他の型で実行できるが、それ自体では実行できない特定の型を探しています。
次のシナリオを想像してください。
public enum Suit : byte
{
Spades = 0x00, // bits: xx00 xxxx
Hearts = 0x10, // bits: xx01 xxxx
Diamonds = 0x20, // bits: xx10 xxxx
Clubs = 0x30 // bits: xx11 xxxx
}
public enum Rank : byte
{
Ace = 0x01, // bits: xxxx 0001
_2 = 0x02, // bits: xxxx 0010
// ...
_10 = 0x0A, // bits: xxxx 1010
Jack = 0x0B, // bits: xxxx 1011
Queen = 0x0C, // bits: xxxx 1100
King = 0x0D // bits: xxxx 1101
}
次の操作を許可したい:
playingCardQueenOfHearts = Suit.Hearts| Rank.Queen;
ただし、次の場合は除きます。
thisIsNonsenseInMyScenario = Suit.Spades | Suit.Hearts;
thisIsOdd = Rank.Jack | Rank.Ace;
おそらく、enum
これは最良の選択ではありません (実際、探している相手だけが許可されます)。他のタイプ、または探しているものをアーカイブする方法はありますか?
私はそれを実行するためにキャストできることを知っています(queenOfHearts = (byte)Suit.Hearts| (byte)Rank.Queen
)が、
を。キャストは何でも許可します:
thisIsWhat = (int)Suit.Spades | (int)DayOfWeek.Sunday;
b. 制限したい、または少なくとも同じタイプの難しい OR 要素を作成したい:
thisIsNonsenseInMyScenario = Suit.Spades | Suit.Hearts;
thisIsOdd = Rank.Jack | Rank.Ace;