为什么我得到System. collections . generic . list ' 1[System. colle

本文关键字:System colle generic collections 为什么 list | 更新日期: 2023-09-27 18:10:06

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

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

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

这是在播放器类文件。

然后在Shop类中,我在做;

Player player = new Player();

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

player.inventory.Add("Axe");

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

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

我该如何解决这个问题?我应该换成Axe

为什么我得到System. collections . generic . list ' 1[System. colle

这不是错误,它只是打印出列表。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时在list上调用)将打印列表的类型,而不是内容本身。这就是为什么你会收到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);
}

的球员。库存是一个集合对象,不能直接输入。