0

フラグ/ビット単位の操作を他の型で実行できるが、それ自体では実行できない特定の型を探しています。

次のシナリオを想像してください。

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;
4

1 に答える 1