【发布时间】:2025-12-08 07:55:01
【问题描述】:
我在使用 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);
}
}
【问题讨论】:
-
你说的值消失是什么意思?
-
它一旦离开循环就无法改变,它保持原样,任何访问都表明它的价值没有改变。
-
你能澄清哪个值消失了吗?是
defence.damage吗? -
如果没有看到 DefenceManager.defenceCollection 的代码(它是如何创建的以及它是字段还是属性)和 DefenceTerminal.ReadnetworkPacket 的代码,除了猜测之外很难做更多的事情。
-
请出示ReadNetworkPacket()的源代码