我正在尝试从字典中删除一个条目(注意:关联数组上下文)。删除是基于给定的数字。任意数量的键都可以包含该数字加上其他文本。我目前正在做的是..
var results = from result in CGlobals.orders.Keys
where Regex.IsMatch(result, cmbJobNum.Text + "*")
select result;
foreach (string result in results)
CGlobals.orders.Remove(result);
我收到一个无效操作异常,表明集合已被修改。我在这里做错了什么,我该如何解决?
请您参考如下方法:
问题是 LINQ 中的延迟执行。使用这个:
var results = (from result in CGlobals.orders.Keys
where Regex.IsMatch(result, cmbJobNum.Text + "*")
select result).ToList();
foreach (string result in results)
CGlobals.orders.Remove(result);
解释:
LINQ 中的延迟执行功能不会在您定义它的地方执行查询,而只会在您枚举它时执行查询,即在 foreach 循环中。这意味着,您正在遍历 CGlobals.orders.Keys 枚举,同时从字典中删除项目,这将更新键枚举。
