林奇奇怪的行为

时间:2015-11-25 08:43:24

标签: c# linq

Statment:

input[type='checkbox'].icon-checkbox{display:none}
input[type='checkbox'].icon-checkbox+label .unchecked{display:inline}
input[type='checkbox'].icon-checkbox+label .checked{display:none}
input[type='checkbox']:checked.icon-checkbox{display:none}
input[type='checkbox']:checked.icon-checkbox+label .unchecked{display:none}
input[type='checkbox']:checked.icon-checkbox+label .checked{display:inline}

抛出:

  

集合被修改枚举操作可能无法执行

如何解决这个问题?

(definitions != null && definitions.Where(key => key.asset_id != null &&
                                          key.asset_id == item).FirstOrDefault() != null

2 个答案:

答案 0 :(得分:3)

问题是代码中的某个地方definitions集合已被修改。主要是因为另一个线程中的集合修改,但它可能有其他一些原因。你应该找到在其他地方修改集合的代码片段。您可以使用definitions保护lock变量,只要您使用definitions。{/ p>

if (definitions != null)
{
    lock (definiitons)
    {
        var definition = definitions.FirstOrDefault(key => key.asset_id != null && key.asset_id == item);
        if (definition != null)
            CurrentDuration = definition.duration;
    }
}

并在您修改definitions或其引用的任何地方放置锁定,例如:

lock (definitions)
{
    definitions.Add(x);
}

lock (definitions)
{
    definitions.Remove(x);
}

甚至

var otherRef = definitions
lock (otherRef )
{
    otherRef .Add(x);
}

答案 1 :(得分:0)

我认为" CurrentDuration"是一个foreach循环变量计数器。

foreach语句用于迭代集合以获取所需的信息,但不能用于添加,删除或更改源集合中的项目以避免不可预测的副作用。如果您需要添加,删除或更改源集合中的项目,请使用for循环。