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

时间:2012-06-09 03:11:11

标签: c# list loops xna

我遇到了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工作,列表和循环没有。

再次:在循环中,一切正常,我已多次检查,但它没有...坚持......就像它让自己的小个人名单搞砸然后在完成之后丢弃它当您尝试更新列表时无益。它与List有一个奇怪的特质我确定。

其他废话:

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);
            }
        }

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

听起来DefenceTerminalstruct,因此是value类型。这意味着当您浏览foreach loop时,您只是在更改副本。尝试使用经典for loop并将实际列表编入索引。