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

时间:2013-04-19 13:48:32

标签: c# visual-studio-2010

所以我在septemeber开始了一个Web开发课程,我们将用C#编程。所以我开始学习它,所以我有一些经验。现在我有大约2年的HTML,CSS和PHP经验,所以我马上选择了C#。

我正在上课,我通过做而不是阅读来学习。我决定制作一个小型的基于控制台的RPG来学习课程。我有一个基本的游戏,但我有一个问题。我正试图在另一个类中显示Player类的玩家库存。

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

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

这是在Players类文件中。

然后在商店课上,我正在做;

Player player = new Player();

创建一个新对象来访问播放器类。然后在店里给List添加一些东西,我正在做;

player.inventory.Add("Axe");

但如果我在控制台中打印player.inventory();,我会收到错误 - System.Collections.Generic.List`1 [System.String]。

有人可以帮我吗?我需要提供更多代码吗?

5 个答案:

答案 0 :(得分:4)

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

我猜你想让它像在PHP中一样工作,你在那里打印用逗号分隔的数组?尝试:

string.Join(", ", player.inventory);

答案 1 :(得分:2)

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

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

编辑*根据评论

Console.Write(string.Join(System.Environment.NewLine, player.Inventory));

答案 2 :(得分:1)

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

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

Console.WriteLine(items);

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

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

答案 3 :(得分:0)

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

您需要以下内容:

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

答案 4 :(得分:0)

如果您想输入所有库存商品,流动的代码应该有效:

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

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