C#System.Collections.Generic.List`1

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

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

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

public List inventory = new List(); 

这是在Players类文件中。

然后在商店类,我正在做;

 Player player = new Player(); 

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

 player.inventory.Add("Axe"); 

但是如果我制作了player.inventory(); 在控制台打印出来,我收到一个错误 – System.Collections.Generic.List`1 [System.String]。

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

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

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

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

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

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

编辑*根据评论

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

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

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

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

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

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

你需要这样的东西:

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

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

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

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