2011-09-06 40 views
1

我試圖從字典中刪除條目(注意:關聯數組上下文)。刪除是基於給定的數字。任何數量的密鑰都可以包含該號碼加上其他文本。我目前正在做的是..使用正則表達式刪除字典條目

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

我收到一個無效的操作異常,其中指出該集合已被修改。我在這裏做錯了什麼,我該如何解決這個問題?

回答

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

說明:
在LINQ的延遲執行功能執行查詢,不是你定義它,但只有當你列舉的,即在foreach循環。這意味着,您正在遍歷枚舉CGlobals.orders.Keys,並同時從字典中刪除將更新鍵枚舉的項目。

2

問題是,LINQ在你問他們的時候會產生結果,而不是一次性產生結果。 你需要類似foreach (string result in results.ToArray())