-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

cardStackを呼び出したときに が空である可能性がありますPop()。ポップする前にスタック内のカードの数を確認し、デッキが空の場合は合理的なことを行うことをお勧めします。

于 2011-04-16T02:14:28.240 に答える
1

たぶんこれはばかげた質問です...しかし、ポップする前にスタックが空でないことを確認していますか? この例外がスローされる唯一の理由であるMSのドキュメントによると...

于 2011-04-16T02:16:55.263 に答える
0

そこにはカードがありません!

カードの新しいリストを作成すると、そのリストは空で始まります。次に、それらをすべて取得して (読み取り: なし)、スタックにプッシュします。空のスタックが得られます。

そしてポップしようとしますが、空のスタックからはポップできません。とそのInvalidOperationException理由 (「Stack<T>空です」) は、ドキュメントに記載されています。

カードをいくつか追加して、カードのリストを初期化する必要があります。または、リストを削除してスタックを直接初期化するだけかもしれません。

また、ポップしすぎないようにする必要もあります。スタックからすべてのカードをポップすると、次にポップするときにスタックが空になり、同じ問題が発生します。

于 2011-04-16T02:14:26.143 に答える
0

そのコードを見ると、実際にプッシュされるカードはありませんcardStack(カードは最初は空です)。C# がポップするものが何もないことを示しているため、例外が発生しています。

于 2011-04-16T02:14:54.710 に答える