带有 List 的 Foreach/for 循环无法正确更新

本文关键字:循环 更新 for List Foreach 带有 | 更新日期: 2023-09-27 18:36:34

我在foreach循环和List<T>方面遇到了一些问题

foreach (DefenceTerminal defence in DefenceManager.defenceCollection)
{
    defence.ReadNetworkPacket(packetReader);
    //this is a very simple function that just sets defence.damage = to whatever
    //it properly sends the value and sets it
    //defence.damage is a int
}

当我离开循环时,值...消失。(它无法更改)

离开循环后,所有值保持不变

在更新中以类似的方式访问该列表。

我也使用for循环作为替代方案,所以我想这比其他任何事情都更像是一个List<T>问题。

但是,我更愿意继续使用列表。建议?

对于那些想要非常简单功能的人来说,这是一个非常简单的功能

    public void ReadNetworkPacket(PacketReader packetReader)
    {
        damage = packetReader.ReadInt32();
    }

IT 有效,列表和循环无效。

再次:在循环内一切正常,我已经检查了多次,但没有......棍。。。就像它制作自己的小个人列表来弄乱然后在完成后将其删除一样,这在您尝试更新列表时没有帮助。我敢肯定,这是一种奇怪的特质,与列表有关。

其他废话:

public static List<DefenceTerminal> defenceCollection = new List<DefenceTerminal>();
        for (int i = 0; i < factionCount; i++)
        {
            DefenceTerminal d = new DefenceTerminal();
            for (int j = 0; j < defenceLimit; j++)
            {
                defenceCollection.Add(d);
            }
        }

带有 List<T> 的 Foreach/for 循环无法正确更新

请发布更多代码,但我觉得您创建的集合太本地化了,请在类范围内将其移动到更高的位置,就像私有成员变量一样。

听起来DefenceTerminal是一个struct,因此是一个value类型。 这意味着当您完成foreach loop时,您只是在更改副本。 尝试使用经典for loop并改为为实际列表编制索引。