使用Regex删除字典条目
本文关键字:字典 删除 Regex 使用 | 更新日期: 2023-09-27 18:07:37
我正试图从字典中删除一个条目(注意:关联数组上下文(。删除是基于给定的数字。任何数量的键都可以包含该数字和其他文本。我目前正在做的是…
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
枚举上循环,同时从字典中删除将更新密钥枚举的项。
问题是LINQ在您请求结果时生成结果,而不是一次生成所有结果。你需要foreach (string result in results.ToArray())
这样的东西。