Jam*_*mes 9 c# collections foreach dictionary enumeration
我有这个代码在游戏的每一帧运行:
foreach (var repeaterAction in conditionTimes.Keys)
{
if (repeaterAction.Condition() == true)
{
if (conditionTimes[repeaterAction] == TimeSpan.Zero)
{
repeaterAction.Action();
}
else if (conditionTimes[repeaterAction] >= repeaterAction.InitialLapse)
{
repeaterAction.Action();
conditionTimes[repeaterAction] -= repeaterAction.ActionInterval;
}
conditionTimes[repeaterAction] += gameTime.ElapsedGameTime;
}
else
{
conditionTimes[repeaterAction] = TimeSpan.Zero;
}
}
Run Code Online (Sandbox Code Playgroud)
这给了我以下错误:
收集被修改; 枚举操作可能无法执行.
有没有办法修改foreach循环中键值对中的值,而不是每帧都复制Dictionary?
ntz*_*lis 13
我建议不要尝试修改集合,同时使用字典循环它,但是由于可以直接访问密钥,因此可以实现.只需在.ToArray()
之后添加conditionTimes.Keys
,foreach
然后键成为一个单独的集合,您可以修改字典:
foreach (var repeaterAction in conditionTimes.Keys.ToArray())
{
if (repeaterAction.Condition() == true)
{
if (conditionTimes[repeaterAction] == TimeSpan.Zero)
{
repeaterAction.Action();
}
else if (conditionTimes[repeaterAction] >= repeaterAction.InitialLapse)
{
repeaterAction.Action();
conditionTimes[repeaterAction] -= repeaterAction.ActionInterval;
}
conditionTimes[repeaterAction] += gameTime.ElapsedGameTime;
}
else
{
conditionTimes[repeaterAction] = TimeSpan.Zero;
}
}
Run Code Online (Sandbox Code Playgroud)
您还必须修改您的代码,以便在密钥更改时实际从字典中删除条目并添加新条目,因为密钥实际上无法更改,只需删除即可.
同样不建议这样做.
归档时间: |
|
查看次数: |
20566 次 |
最近记录: |