无法打印属性列表中的值c#

时间:2018-06-03 20:05:58

标签: c#

我有一个游戏要求用户猜测物品的价格 用户猜测后,控制台必须打印所有以前的猜测。 这是我的列表属性

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

1 个答案:

答案 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