我正在寻找某种类型,允许使用其他类型但不能自行执行标记/按位操作。
想象一下以下场景:
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;
答案 0 :(得分:3)
我会为此创建一个类型(可能是class
或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);