在您的Hand
班级中,您将当前手牌存储在List<string>
适当命名的cards
. 在您的DisplayHand
方法中,您可以使用循环遍历列表foreach
:
foreach (Card card in cards) {
// process and/or display current card
}
现在,在您的Card
类中,该ToString()
方法已被重载以接受两个参数:
public string ToString(bool shortFormat, bool displaySuit)
这两个相同的参数可以方便地传递给类DisplayHand
中的函数Cards
。由于您想从该方法调用该ToString()
方法,您可以简单地传递您收到的参数,您将返回一个表示卡片的漂亮且格式化的字符串!您应该无需做太多工作,就可以将上面的循环与对卡片的调用结合起来,以获得所需的输出:DisplayHand
ToString()
public void DisplayHand(bool shortFormat, bool displaySuit) {
StringBuilder cardOutput = new StringBuilder();
foreach (Card card in cards) {
if (cardOutput.Length > 0) {
// we already have one or more cards to display for this hand; separate them
// with a space-delimiter
cardOutput.Append(" ");
}
// add the current card to the display
cardOutput.Append(card.ToString(shortFormat, displaySuit));
}
Console.WriteLine(cardOutput.ToString());
}
我使用一个空格作为卡片之间的分隔符;您可以将其更新为您认为合适的任何内容。此外,如果您不希望每个卡片列表出现在换行符上,只需将Console.WriteLine()
改为Console.Write()
。
* 注意:我选择StringBuilder
在我的示例中使用而不是基本的字符串连接有两个原因。首先是因为在 C# 中,字符串是不可变的(连接它们的效率远低于使用StringBuilder
);第二个是向您展示如何使用StringBuilder
(我只假设您不使用它,因为您的示例代码都不包含它)。要做到这一点StringBuilder
(删除评论/等):
string cardOutput = string.Empty;
foreach (Card card in cards) {
if (!cardOutput.Equals(string.Empty)) cardOutput += " ";
cardOutput += card.ToString(shortFormat, displaySuit);
}
Console.WriteLine(cardOutput);