所以我有一个构造函数和一个返回卡片的方法。我出于某种原因得到了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
}
谢谢!
答案 0 :(得分:1)
当您致电cardStack
时,Pop()
可能为空。我建议您在弹出之前检查堆栈中的卡数,如果卡座是空的,请执行合理的操作。
答案 1 :(得分:1)
也许这是一个愚蠢的问题......但是你在弹出之前检查堆栈是否为空?根据{{3}},这是引发此异常的唯一原因......
答案 2 :(得分:0)
你那里没有卡片!
您创建了一个新的卡片列表list starts empty。然后你全部抓住它们(读:无)并将它们推入堆栈。你得到一个空的堆栈。
然后你尝试弹出,但你不能从空堆栈中pop。 InvalidOperationException
和原因(“Stack<T>
为空”)就在文档中。
您需要通过adding部分卡片初始化您的卡片列表。或者只是删除列表并直接初始化堆栈。
而且你还需要确保你没有太多弹出。如果你弹出堆栈中的所有卡,当你弹出下一个时,堆栈将是空的,你将遇到同样的问题。
答案 3 :(得分:0)
查看该代码,实际上没有卡被推到cardStack
(卡片最初是空的)。你得到了例外,因为C#告诉你没有什么可以弹出。