声明:
(definitions != null && definitions.Where(key => key.asset_id != null &&
key.asset_id == item).FirstOrDefault() != null
Run Code Online (Sandbox Code Playgroud)
投掷:
集合被修改,枚举操作可能无法执行
如何解决这个问题?
if (definitions != null
&& definitions
.Where(key => key.asset_id != null && key.asset_id == item)
.FirstOrDefault() != null)
{
CurrentDuration = definitions
.Where(key => key.asset_id != null && key.asset_id == item)
.FirstOrDefault().duration;
}
Run Code Online (Sandbox Code Playgroud)
问题是代码中的某个地方definitions集合被修改了。主要是因为另一个线程中的集合修改,但也可能有其他一些原因。您应该在其他地方找出正在修改集合的代码段。无论您在何处使用,都可以使用 来保护definitions变量。lockdefinitions
if (definitions != null)
{
lock (definiitons)
{
var definition = definitions.FirstOrDefault(key => key.asset_id != null && key.asset_id == item);
if (definition != null)
CurrentDuration = definition.duration;
}
}
Run Code Online (Sandbox Code Playgroud)
并在修改definitions或其引用的任何地方放置锁定,例如:
lock (definitions)
{
definitions.Add(x);
}
Run Code Online (Sandbox Code Playgroud)
或者
lock (definitions)
{
definitions.Remove(x);
}
Run Code Online (Sandbox Code Playgroud)
甚至
var otherRef = definitions
lock (otherRef )
{
otherRef .Add(x);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
380 次 |
| 最近记录: |