为什么我会收到InvalidOperationException?

时间:2011-04-16 02:09:52

标签: c# stack 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
}

谢谢!

4 个答案:

答案 0 :(得分:1)

当您致电cardStack时,Pop()可能为空。我建议您在弹出之前检查堆栈中的卡数,如果卡座是空的,请执行合理的操作。

答案 1 :(得分:1)

也许这是一个愚蠢的问题......但是你在弹出之前检查堆栈是否为空?根据{{​​3}},这是引发此异常的唯一原因......

答案 2 :(得分:0)

你那里没有卡片!

您创建了一个新的卡片列表list starts empty。然后你全部抓住它们(读:无)并将它们推入堆栈。你得到一个空的堆栈。

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

您需要通过adding部分卡片初始化您的卡片列表。或者只是删除列表并直接初始化堆栈。

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

答案 3 :(得分:0)

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