Я не советую пытаться изменить коллекцию, просматривая ее со словарями, однако это возможно, поскольку прямой доступ к ключу доступен.Просто добавьте .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;
}
}
Вы также должны изменить свой код, чтобы, еслипри изменении ключа вы фактически удаляете запись из своего словаря и добавляете новую, поскольку ключи действительно не могут быть изменены, просто удалены.
Опять же, это не рекомендуется.