首页 > 解决方案 > .Contains 方法总是返回 false

问题描述

随机生成扑克牌的类:

class Card
{
    private string face;
    private string suit;

    //Constructor
    public Card()
    {
        string[] faceArray = {"Ace", "Deuce", "Three", "Four", "Five", "Six", "Seven", "Eight"
        , "Nine", "Ten", "Jack", "Queen", "King"};
        string[] suitArray = { "Clubs", "Hearts", "Spades", "Diamonds" };

        Random rand = new Random();
        face = faceArray[rand.Next(0, 13)];
        Thread.Sleep(150);
        Random dand = new Random();
        suit = suitArray[dand.Next(0, 4)];
    }
    //Method face of suit
    public override string ToString()
    {
        return face + " of " + suit;
    }
}

我认为这可以正常工作,但问题出在:

class DeckOfCards
{
    private Card[] deck = new Card[52];

    //constructor fills deck with unique cards
    public DeckOfCards()
    {
        for (int i = 0; i < 52; i++)
        {
            Card tempCard = new Card();
            if (deck.Contains(tempCard))
                 i--; 
            else               
                 deck[i] = tempCard; 
        }
    }
}

即使我有:

if (deck.Contains(tempCard))
                     i--; 

甲板仍然产生重复。我是否错误地使用了数组方法?

标签: c#arraysclass

解决方案


您正在尝试检查 Card 对象。因此它将使用该类的 .Equals() 方法。

请用您的业务逻辑覆盖 Card 类的 Equals() 方法。然后它将按您的预期工作。

class Card
{
    private string face;
    private string suit;

    //
    // your other methods
    //

    public override bool Equals(object obj)
    {
        var item = obj as Card;

        if (item == null)
        {
           return false;
        }

        return this.face.Equals(item.face) && this.suit.Equals(item.suit);
    }
}

推荐阅读