2013-01-14 2 views

답변

3

열거 중에 컬렉션을 수정할 수 없습니다. 하지만 당신은 사용할 수있는 for-loop :

for (int i = DtSet.Tables.Count - 1; i >= 0; i--) 
{ 
    var table = DtSet.Tables[i]; 
    if (table.TableName != "tblAccounts") 
     DtSet.Tables.Remove(table); 
} 
+0

대단히 감사합니다. – user1936588

1

당신은 당신이 foreach 동안 컬렉션을 수정하려고이 언제를 얻을 수 있습니다. 컬렉션이 반복되는 방식과 관련이 있습니다.

두 가지 방법으로 할 수 있습니다. 한 가지 방법은 루프 중에 제거 할 테이블을 결정한 다음 나중에 되돌아 가서 제거하는 것입니다. 다음 작동합니다 :

var tablesToRemove = new List<DataTable>(); 
foreach (DataTable table in DtSet.Tables) 
{ 
    if (table.TableName != "tblAccounts") 
    { 
     tablesToRemove.Add(table); 
    } 
} 

foreach (DataTable table in tablesToRemove) 
{ 
    DtSet.Tables.Remove(table); 
} 
+0

Tim의 대답은 확실히 한 번 반복되기 때문에 더 빨리 실행됩니다. 이렇게하면 제거하기 전에 제거 할 테이블을 디버깅하고 정확히 볼 수있는 이점이 있습니다. 하지만 아마 팀의 방식대로 해줄거야. –

+0

설명해 주셔서 감사합니다. – user1936588

1

테스트되지 않은 있지만 루프가없는 것처럼 그냥 던져.

var accounts = DtSet.Tables["tblAccounts"]; 
DtSet.Tables.Clear(); 
DtSet.Tables.Add(accounts); 
+0

좋은 생각 +1, 그러나, '지우기'는 무료가 아닙니다. –

+0

"내가 쓴 코드에서"- ;-). 문자열 인덱서에는 아마 루프도 있습니다. –