我正在寻找一种允许使用其他类型而不是自身执行标志/按位操作的特定类型。
想象以下场景:
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;