C# 返回与返回变量结果不相同的方法

C# 返回与返回变量结果不相同的方法,c#,C#,假设: returnedDeck = player.DoYouHaveAny(value); MessageBox(returnDeck.Count); 现在,问题来了。使用此方法: public Deck DoYouHaveAny(Value value) { textBoxOnForm.Text += name + " has " + cards.PullOutValues(value).Count + " " + Card.Plural(value) + Envi

假设:

returnedDeck = player.DoYouHaveAny(value);
MessageBox(returnDeck.Count);
现在,问题来了。使用此方法:

public Deck DoYouHaveAny(Value value)
    {
        textBoxOnForm.Text += name + " has " + cards.PullOutValues(value).Count + " " + Card.Plural(value) + Environment.NewLine;

        return cards.PullOutValues(value);
    }
我将始终返回Deck.Count=0

但如果我改变方法来实现这一点:

public Deck DoYouHaveAny(Value value)
    {
        deckToReturn = cards.PullOutValues(value);
        textBoxOnForm.Text += name + " has " + cards.PullOutValues(value).Count + " " + Card.Plural(value) + Environment.NewLine;

        return deckToReturn;
    }
现在returnedDeck.Count将返回一些值。 纯粹是好奇,但为什么我不能直接使用“返回卡。拉出值(value);”呢

以下是PullOutValue的代码:

public Deck PullOutValues(Value value)
    {
        Deck deckToReturn = new Deck(new Card[] { });
        for (int i = deck.Count - 1; i >= 0; i--)
            if (deck[i].Value == value)
                deckToReturn.Add(Deal(i));
        return deckToReturn;
    }

在我看来,您的PullOutValues方法做了一些事情,如果再次执行,将返回另一个值。在文本框中使用相同的方法。在第一个示例中,文本部分首先使用它,这将导致第二次使用(在返回中)为空

在第二个示例中,使用第一个方法调用将其放入变量中,然后返回该变量。但是,在这种情况下,文本必须为空。无论哪种方法,第二个示例都是更好的方法,您还应该使用deckToReturn,而不是多次调用方法PullOutValues(这通常是更好的做法)。

Ok

该方法在textBoxForm.Text赋值中调用,移除匹配的卡并返回一组。
但当我返回该方法时,它会再次执行该操作。。。但是第一个已经移除了卡片。

PullOutValues()实现???这只是一个猜测,但却是一个有根据的猜测:
PullOutValues
改变了对象的状态,因此对它的第二次调用将显示不同的结果。
PullOutValues
做什么?从名字来看,它实际上清空了列表。你能包括
卡的代码吗。PullOutValues()