我有以下C#代码段,它接受一个列表,找到准备更新的对象,然后将它们推入临时列表,从主列表中删除,然后继续它的快乐方式.我的问题是循环通过我的主列表的foreach块不会退出.
TempLog.Clear(); //Ensure TempLog is empty
foreach (CLogger ready in PlayerLog)
{
if (ready.UpdateReady == true) // Record is ready to be updated in database
{
TempLog.Add(ready); // Add record to templog
PlayerLog.Remove(ready); // Remove from playerlog
}
}
<---- Never reaches this point
if (TempLog.Count > 0) // Just check that templog isn't empty
{
new Thread(Update).Start(); // Run update code
}
Run Code Online (Sandbox Code Playgroud)
我已经把大量的调试放入,我可以看到PlayerLog从1开始,TempLog为0,然后进入foreach循环,选择记录UpdateReady标志打开,TempLog转到1,PlayerLog转到0,然后它只是停止..没有错误,只是停止..
谢谢您的帮助 :)
Mar*_*off 14
你在迭代它的枚举器时修改了PlayerLog ,这是一个很大的禁忌.
更好的选择是迭代PlayerLog 的副本,同时修改原始的PlayerLog:
foreach (CLogger ready in new List<PlayerLogType>(PlayerLog))
{
if (ready.UpdateReady) // Please don't compare boolean values against true...
{
TempLog.Add(ready);
PlayerLog.Remove(ready);
}
}
Run Code Online (Sandbox Code Playgroud)
或者,您可以使用传统的for循环.就个人而言,我喜欢从最后开始,因为我知道我将删除项目,所以我不必重新调整索引:
for (int i = PlayerLog.Count - 1; i >= 0; i--)
{
var ready = PlayerLog[i];
if (ready.UpdateReady)
{
TempLog.Add(ready);
PlayerLog.RemoveAt(i);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
282 次 |
| 最近记录: |