问题描述
|
所以我有一个构造函数和一个返回卡的方法。由于某种原因,我收到了InvalidOperationException。有人能想到什么吗?
卡列表不为空,我只是从此处的构造函数中删除了卡生成算法,以使其更易于阅读。
这是代码:
public Deck()
{
cards = new List<Card>();
cardStack = new Stack<Card>();
// cards list gets populated here
foreach (Card card in cards)
{
cardStack.Push(card);
}
}
public Card drawCard()
{
return cardStack.Pop(); // This line is giving me an InvalidOperationException
}
谢谢!
解决方法
当您调用
Pop()
时,cardStack
可能为空。我建议您在弹出纸叠之前先检查纸叠中的纸牌数量,如果纸盘为空,请做一些合理的事情。
,也许这是一个愚蠢的问题……但是您在弹出堆栈之前是否检查堆栈是否为空?根据MS文档,这是引发此异常的唯一原因...
,查看该代码,实际上没有卡推入cardStack
(卡最初是空的)。您正在获取例外,因为C#告诉您没有弹出的内容。
,您那里没有卡!
您创建一个新的卡列表,该列表开始为空。然后,将它们全部抓住(读:无)并将它们推入堆栈。您得到一个空堆栈。
然后尝试弹出,但是无法从空堆栈中弹出。 documentation4ѭ及其原因(\“the5ѭ为空\”)就在文档中。
您需要通过添加一些卡来初始化卡列表。或者也许只是删除列表并直接初始化堆栈。
而且,您还需要确保弹出的声音不会过多。如果您将所有卡从堆栈中弹出,则在接下来弹出时,堆栈将为空,并且您将遇到相同的问题。