-1

所以我有一个构造函数和一个返回卡片的方法。由于某种原因,我收到了 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
}

谢谢!

4

4 回答 4

1

也许这是一个愚蠢的问题……但是您是否在弹出堆栈之前检查堆栈是否为非空?根据MS 文档,这是应该抛出此异常的唯一原因......

于 2011-04-16T02:16:55.263 回答
1

cardStack当您调用时,它可能是空的Pop()。我建议您在弹出之前检查堆栈中的卡片数量,如果甲板是空的,请做一些合理的事情。

于 2011-04-16T02:14:28.240 回答
0

查看该代码,实际上没有卡片被推入cardStack(卡片最初是空的)。你得到了例外,因为 C# 告诉你没有什么可以弹出的。

于 2011-04-16T02:14:54.710 回答
0

你那里没有卡!

您创建了一个新的卡片列表,该列表开始为空。然后你把它们全部抓住(阅读:无)并将它们推入堆栈。你得到一个空堆栈。

然后你尝试弹出,但你不能从空堆栈中弹出。InvalidOperationException原因(“Stack<T>是空的”)就在文档中。

您需要通过添加一些卡片来初始化卡片列表。或者也许只是删除列表并直接初始化堆栈。

而且你还需要确保你没有弹出太多。如果你从堆栈中弹出所有卡片,当你下一个弹出时,堆栈将为空,你会遇到同样的问题。

于 2011-04-16T02:14:26.143 回答