c# - .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--;
甲板仍然产生重复。我是否错误地使用了数组方法?
解决方案
您正在尝试检查 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);
}
}
推荐阅读
- javascript - 悬停时BG图像缩小,不要重置位置
- permissions - 当用户为谷歌工作表运行脚本时,我无法更改编辑权限
- node.js - 如何从猫鼬模式中的数组中删除对象?
- kubernetes - 创建的 Docker 注册表在集群内无法访问
- reactjs - React Table问题react table used de useSortBy hook
- docker - 如何更改 php-fpm 默认端口?
- json - 如何在 Java 中将 Amazon QLDB IonStruct 转换为 Json?
- python - 如何使用 gphoto2 和 python 控制多个 DSLR CAMERAS
- python - PyPDF2 清除作家页面
- module - Odoo v13:无法卸载 crm App:记录不存在或已被删除(记录:ir.model.fields(9311,),用户:1)