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;

湾。我想限制或至少制作相同类型的困难 OR-ing 元素:

thisIsNonsenseInMyScenario = Suit.Spades | Suit.Hearts;
thisIsOdd = Rank.Jack | Rank.Ace;
4

1 回答 1

3

我会为此创建一个类型(可以是 aclass或 a struct),例如

public struct Card
{
    public Suit Suit { get; private set; }
    public Rank Rank { get; private set; }
    public Card(Suit suit, Rank rank)
        : this()
    {
        this.Suit = suit;
        this.Rank = rank;
    }
    // include implementations for GetHashCode, Equals, ==, and !=
}

使用喜欢

Card queenOfHearts = new Card(Suit.Hearts, Rank.Queen);
于 2013-10-15T13:08:37.153 回答