我有一个游戏要求用户猜测物品的价格 用户猜测后,控制台必须打印所有以前的猜测。 这是我的列表属性
private List<Product> _previousGuesses = new List<Product>();
public List<Product> PreviousGuesses {
get { return _previousGuesses; }
set { _previousGuesses = value; }
}
和我返回结果的方法:
public GuessStatus CheckGuess(int guess)
{
if (_randomProduct.Price == guess)
{
return GuessStatus.Correct;
}
else if (_randomProduct.Price > guess)
{
_numberOfTries++;
newProduct = new Product()
{
Price = guess,
Description = _randomProduct.Description
};
_previousGuesses.Add(newProduct);
return GuessStatus.TooLow;
}
else
和我正在尝试打印的主程序:
case GuessStatus.Correct:
Console.WriteLine("You got it!");
Console.WriteLine("Number of tries: " + game.NumberOfTries);
List<Product> guessedProducts = game.PreviousGuesses;
guessedProducts.ForEach(el => Console.WriteLine(el));
当我打印时,我没有看到我猜测的价格和描述,我看到项目名称.classname.Program
答案 0 :(得分:0)
这里发生的事情guessedProducts.ForEach(el => Console.WriteLine(el));
基本上如下:
foreach (var p in guessedProducts)
{
Console.Write(p.ToString() + "\r\n");
}
正如您所看到的,在ToString()
的每个Products
上都会调用Product
下方。但是,因为ToString()
没有Object.ToString(p)
的实现,所以运行时调用p.GetType().Name
实际上返回override ToString(){}
。
如何解决此问题:在Product
中创建Product
方法(开始输入“覆盖”,Intellisense将有所帮助)。在那里,您可以呈现您希望输出public override string ToString()
{
return $"Product: {Description}, your guess: {Price}";
}
的方式,例如:
guessedProducts.ForEach(Console.WriteLine);
这只是众多方法中的一种,但也许是目前为止最简单的方法。
P.S。:您可以将相关表达式简化为WHERE Group_ID = 38