带有 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);
}
}
请发布更多代码,但我觉得您创建的集合太本地化了,请在类范围内将其移动到更高的位置,就像私有成员变量一样。
听起来DefenceTerminal
是一个struct
,因此是一个value
类型。 这意味着当您完成foreach loop
时,您只是在更改副本。 尝试使用经典for loop
并改为为实际列表编制索引。