Skip to main content
 首页 » 编程设计

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

2024年01月25日26zdz8207

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

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 枚举,同时从字典中删除项目,这将更新键枚举。