簡體   English   中英

為什么會收到InvalidOperationException?

[英]Why am I getting an 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文檔 ,這是引發此異常的唯一原因...

您那里沒有卡!

您創建一個新的卡列表,該列表開始為空 然后,將它們全部抓住(讀:無)並將它們推入堆棧。 您得到一個空堆棧。

然后嘗試彈出,但無法從空堆棧中彈出 InvalidOperationException及其原因(“ Stack<T>為空”)就在文檔中。

您需要通過添加一些卡來初始化卡列表。 或者也許只是刪除列表並直接初始化堆棧。

而且,您還需要確保彈出的聲音不會過多。 如果將所有卡從堆棧中彈出,則在接下來彈出時,堆棧將為空,並且您將遇到相同的問題。

查看該代碼,實際上沒有卡被推入cardStack (卡最初是空的)。 因為C#告訴您沒有可彈出的內容,所以您得到了例外。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM