如何循环访问包含对象的列表?c#

How do I iterate through a list containing objects? c#

提问人:Ehab Nasir 提问时间:11/2/2023 更新时间:11/2/2023 访问量:49

问:

我创建了一个列表来存储来自另一个类的对象。存储在我的列表中的每个对象都有一个名称和一个整数。我想知道我是否可以遍历我的列表并显示每个对象的名称。如果我将 i 的类型更改为 VAR 或动态,它会说它超出了范围。

    public List<InventoryHandling> Inventory = new List<InventoryHandling>();

    public void inventorySelect()
    {
        Inventory[0] = new InventoryHandling("Potion", 4);

        foreach(int i in Inventory)
        {
            Console.WriteLine(Inventory[i].Name);
        }
    }
C# 列表 对象 foreach

评论

0赞 Fildor 11/2/2023
中没有 .按 for 和 index 迭代,或按 foreach 和 items 迭代intinventory
1赞 nvoigt 11/2/2023
Inventory[0] = new InventoryHandling("Potion", 4);仅当列表中已存在可以替换的项目时,这才有效。你可能想上榜吗?.Add()

答:

6赞 Joel Coehoorn 11/2/2023 #1

首先,这一行是错误的:

Inventory[0] = new InventoryHandling("Potion", 4);

问题是索引引用了列表中的第一项,但(大概)此时列表还没有任何空间。索引位置不存在,并且 C# 不允许通过分配给下一个索引来追加到列表。相反,当您想要将新项添加到列表中时,您应该调用它的方法:[0][0].Add()

Inventory.Add(new InventoryHandling("Potion", 4));

现在我们有一个包含一些内容的列表,我们可以谈谈如何迭代它。就像追加一样,您不会使用带有循环的索引foreach

foreach(InventoryHandling ih in Inventory)
{
    Console.WriteLine(ih.Name);
}

如果你真的想使用索引,你可以用一个循环来做:for

for(int i = 0; i < Inventory.Length; i++)
{
    Console.WriteLine(Inventory[i].Name);
}

评论

0赞 Joel Coehoorn 11/2/2023
很好奇为什么这被否决了。