使用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);

我得到一个无效的操作异常,它表示集合已被修改。我在这里做错了什么?我该如何解决?

使用Regex删除字典条目

问题在于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())这样的东西。