【问题标题】:Why am I getting System.Collections.Generic.List`1[System.String] instead of the list's contents? [duplicate]为什么我得到 System.Collections.Generic.List`1[System.String] 而不是列表的内容? [复制]
【发布时间】:2013-04-19 13:48:31
【问题描述】:

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

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

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

这是在 Players 类文件中。

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

Player player = new Player();

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

player.inventory.Add("Axe");

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

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

我该如何解决这个问题?我应该改用Axe

【问题讨论】:

    标签: c# list visual-studio


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      编辑* 根据 cmets

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

      【讨论】:

      • 我使用了您发布的示例。它现在可以工作了,我会一直使用它,直到我弄清楚如何将它放入一行代码中。
      • @Jon,为什么它需要一个班轮?在许多情况下,我会选择更易读且易于维护的代码。但是,我将编辑我的答案以包含一个单行解决方案,以便您可以看到它是如何完成的:)
      • 既然您已经发布了一个内衬,那么 foreach 循环就更容易理解了。
      【解决方案3】:

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        你需要这样的东西:

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

        【讨论】:

          【解决方案5】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-05-13
            • 2011-12-03
            • 1970-01-01
            • 1970-01-01
            • 2015-04-04
            • 1970-01-01
            • 2019-04-05
            • 1970-01-01
            相关资源
            最近更新 更多