假设:
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;
}
答案 0 :(得分:0)
在我看来,您的PullOutValues方法执行的操作会在再次执行时返回另一个值。您在文本框中使用相同的方法。在第一个示例中,Text部分首先使用它,这将导致第二次使用(以您的返回)为空。
在第二个示例中,您使用第一个方法调用将其放入变量中,然后将其返回。但是,在这种情况下,您的文本必须为空。无论哪种方式,第二个示例都是更好的方法,并且还应该使用deckToReturn而不是多次调用PullOutValues方法(通常是更好的做法)。
答案 1 :(得分:0)
确定。
该方法在textBoxForm.Text分配中调用,删除匹配的卡片并返回卡片组。 但是,当我返回该方法时,它又可以正常工作了……但是第一个方法已经删除了卡片。