比较对象上的特定枚举

本文关键字:枚举 对象 比较 | 更新日期: 2023-09-27 18:35:05

那么,当两个对象都有另一种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;
}

例如,卡 1 是card_0和红色,卡 2 是card_1和红色。这 2 张牌在不同的列表中,一张是玩家的手牌,另一张是弃牌堆,所以我如何比较数字或颜色的enum,以便它知道是接受这张牌进入弃牌堆还是拒绝它并说它不是一张可玩的牌。

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

提前谢谢。

比较对象上的特定枚举

我会在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!
}

你的问题是:如何比较枚举?假设您有两个卡片对象c1c2。要检查它们是否具有相同的颜色,请执行以下操作:

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

要比较卡号,请执行以下操作:

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

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