为什么会收到InvalidOperationException?

问题描述

| 所以我有一个构造函数一个返回卡的方法。由于某种原因,我收到了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ѭ为空\”)就在文档中。 您需要通过添加一些卡来初始化卡列表。或者也许只是删除列表并直接初始化堆栈。 而且,您还需要确保弹出的声音不会过多。如果您将所有卡从堆栈中弹出,则在接下来弹出时,堆栈将为空,并且您将遇到相同的问题。