2011-09-06 15 views
1

사전에서 항목을 삭제하려고합니다 (참고 : 연관 배열 컨텍스트). 삭제는 주어진 숫자를 기반으로합니다. 임의의 수의 키에 해당 번호와 다른 텍스트를 더할 수 있습니다. 내가 현재하고 있어요 .. 내가 컬렉션이 수정 된 상태 잘못된 연산 예외를 받고 있어요Regex로 사전 항목 제거

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())과 같은 것이 필요합니다.