13

我决定制作一个基于控制台的小型 RPG 来学习课程。我有一个基本的游戏,但我有一个问题。我正在尝试在另一个类中显示来自 Player 类的玩家库存。

我正在使用列表来保存玩家库存。

public List<string> inventory = new List<string>();

这是在 Players 类文件中。

然后在 Shop Class 中,我正在做;

Player player = new Player();

制作一个新对象来访问播放器类。然后在商店的列表中添加一些东西,我正在做;

player.inventory.Add("Axe");

但是如果我player.inventory();在控制台中打印出来,我会得到错误的结果:

System.Collections.Generic.List`1[System.String]

我怎样才能解决这个问题?我应该得到Axe

4

5 回答 5

9

这不是错误,它只是打印出列表。List的默认ToString()实现只是打印类型的名称。

我猜你希望它像在 PHP 中一样工作,在其中打印用逗号分隔的数组?尝试:

string.Join(", ", player.inventory);
于 2013-04-19T13:51:51.573 回答
5

您正在尝试打印列表对象而不是列表中包含的值,您需要以下内容:-

foreach(var i in player.Inventory)
{
     Console.WriteLine(i);
}

编辑*根据评论

Console.Write(string.Join(System.Environment.NewLine, player.Inventory));
于 2013-04-19T13:51:37.477 回答
4

如果要一次打印所有项目,则将下一个字符串打印到控制台:

string items = string.Join(Environment.NewLine, player.inventory);

Console.WriteLine(items);

这将在单独的行中打印每个项目

默认情况下ToString()(当你将它传递给时在 list 上调用它Console.WriteLine)将打印列表的类型,而不是内容本身。这就是您收到System.Collections.Generic.List`1[System.String] 的原因。在控制台屏幕上。

于 2013-04-19T13:51:45.723 回答
3

您需要一个foreach循环来迭代列表中的每个成员。您不能只打印整个列表。

你需要类似的东西:

foreach(var i in Player.Inventory)
{
    Console.WriteLine(i);
}
于 2013-04-19T13:51:28.220 回答
0

如果要输入所有库存项目,流动代码应该可以工作:

foreach (string inventoryItem in player.inventory)
{
     Console.WriteLine(inventoryItem);
}

player.inventory 是一个集合对象,不能直接输入。

于 2013-04-19T13:59:18.917 回答