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

时间:2018-07-12 11:30:23

标签: c#

假设:

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);
    }

我总是会得到returnDeck.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;
    }

现在,returnDeck.Count将返回一些值。 只是出于好奇,但是为什么我不能使用“ return cards.PullOutValues(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;
    }

2 个答案:

答案 0 :(得分:0)

在我看来,您的PullOutValues方法执行的操作会在再次执行时返回另一个值。您在文本框中使用相同的方法。在第一个示例中,Text部分首先使用它,这将导致第二次使用(以您的返回)为空。

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

答案 1 :(得分:0)

确定。

该方法在textBoxForm.Text分配中调用,删除匹配的卡片并返回卡片组。 但是,当我返回该方法时,它又可以正常工作了……但是第一个方法已经删除了卡片。