使用正则表达式删除字典条目

MGZ*_*ero 1 c# regex linq

我正在尝试从字典中删除一个条目(注意:关联数组上下文).删除基于给定的数字.任意数量的键都可以包含该数字和其他文本.我现在正在做的是......

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);
Run Code Online (Sandbox Code Playgroud)

我收到一个无效的操作异常,它说明该集合已被修改.我在这里做错了什么,我该如何解决这个问题?

Dan*_*rth 5

问题是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);
Run Code Online (Sandbox Code Playgroud)

说明:
LINQ中的延迟执行功能执行查询而不是您定义它的位置,但仅在您枚举它时,即在foreach循环中执行.这意味着,您循环遍历CGlobals.orders.Keys枚举,同时从字典中删除将更新密钥枚举的项目.