比较对象上的特定枚举

时间:2014-12-23 19:05:52

标签: c# enums

那么,当两个对象都有另一张卡enum时,如何仅将卡object(card1)的号码enum与另一张卡object(card2)的号码enum进行比较颜色?

public enum Number
{
  card_0,card_1
}
public enum Color
{
   Red
}
public Card(int fNum, int fCol)
{
   Number num = (Number)fNum;
   Color color = (Color)fCol;
}

例如,card1是card_0和Red,card2是card_1和Red。 2张牌位于不同的列表中,一张是玩家的手,另一张是弃牌堆,所以如何比较号码或颜色的enum,以便知道是否接受卡进入丢弃堆或拒绝它并说它不是可玩的牌。

if(/* Compare card1 and card2 */)
{
  discardPile.Add(card1);
  hand.RemoveAt(/* Location of card1*/);
}
else
{
  /* do something */
}

提前致谢。

2 个答案:

答案 0 :(得分:3)

我会在进行比较的Card类中添加一个方法:

public bool DiscardOnTopAllowed(Card otherCard)
{
    bool allowed = false;
    if (Color == otherCard.Color)
       allowed = true;
    else if (Number == otherCard.Number)
       allowed = true;

    return allowed;
}

当然,写作的方式较少,但我试图在你学习的过程中保持超级明确。用法:

if (topCard.DiscardOnTopAllowed(selectedCard))
{
     //Discard is good!
}

答案 1 :(得分:1)

您的问题是:如何比较枚举?我们假设您有两个卡片对象c1c2。要检查它们是否具有相同的颜色:

if (c1.Color == c2.Color)
{

}

并比较您的卡号:

if (c1.Number == c2.Number)
{

}

另外,我建议更改卡的实施。如果您使用枚举,则操作枚举而不是整数。 enum继承自int的事实只是一个实现细节。但它不是一个数字。例如,它不支持数学运算(这是有意义的:Color.Black + Color.Red的预期结果)。所以尽量不要将你的枚举与整数混淆。