2010-11-04 49 views
0

刪除的對象我想從一個集合中刪除的對象,如果對象一點兒也不滿足一定條件從集合

 foreach (var data in infData) 
      { 
      if(data.Id==0) 
      { 
       //Remove this object from the collection 
      } 
      } 

如何做到這一點。

編輯:這是完整的代碼

foreach (var data in infData) 
     { 
      //Validate Offence Code 
      IQueryable<Ref_OffenceCode> allRows = dbContext.Ref_OffenceCode; 
      if (allRows.Where(p => p.Code == data.offenceCode && p.StartDate<=data.offenceDate).Count() == 0) 
      { 
       invalidCount += 1; 
      } 

      //Validate Location Code 
      //IQueryable<Ref_OffenceCode> allRows = dbContext.Ref_OffenceCode; 
      if (invalidCount != 0) 
      { 
       infData.Remove(data); 
      } 
     } 
+2

你是如何做到這一點取決於你正在使用什麼特定類型的集合。 – LukeH 2010-11-04 10:50:22

+0

如果通過「收集」你的意思是IEnumerable,你不能。 infData的類型是什麼? – 2010-11-04 10:51:05

+0

這不是完整的代碼,它不會編譯。 – mike 2010-11-04 11:19:25

回答

5

相反從集合中刪除對象,您可以創建一個新的過濾集合:

var filteredList = infData.Where(x => x.Id != 0); 

並且在GC超出範圍時離開GC處理舊收集。你也在你的文章中提到了ArrayList。除非您使用.NET 1.1或更高版本,否則絕對沒有理由使用ArrayList。通用集合會更合適。

+0

謝謝,我正在使用一個通用的集合。請參閱編輯部分中的完整代碼 – 2010-11-04 10:56:50

+0

您最好調用'ToList()',否則您仍將引用原始集合,並會看到後續修改,這也許是您不想要的。 – leppie 2010-11-04 10:58:10

3

List做到這一點:

infData = infData.RemoveAll(p => p.Id == 0) 

和一般你可以做到這一點(對於枚舉):

enumerable = enumerable.Except(enumerable.Where(p => p.Id == 0)); 
+0

這適用於'List ',但OP沒有說明他們正在使用什麼特定類型的集合。 – LukeH 2010-11-04 10:51:38

+0

@LukeH,你說得對,我只是更新了答案。 – 2010-11-04 10:57:33

+0

我喜歡.Except()。不要經常使用它。 +1 – 2010-11-04 14:55:15

1

如果您想從集合中刪除項目(因爲您在迭代集合的同時修改集合),請不要使用foreach

您可以使用基於索引的方法,但回想一下集合大小會改變。如果你只需要刪除一個項目,你可以這樣做:

for (int i = 0; i < infData.Count; i++) 
{ 
    if(infData[i].Id==0) 
    { 
    infData.RemoveAt(i); 
    break; 
    } 
} 

由於@Stefano評論,你可以向後迭代,然後你不需要打破(可以刪除多個項目):

for (int i = infData.Count - 1; i >= 0 ; i--) 
{ 
    if(infData[i].Id==0) 
    { 
    infData.RemoveAt(i); 
    } 
} 
+1

此解決方案的另一個選擇是倒計數,而不是:for(int i = data.count; i> 0; i--)。但我更喜歡建立一個新的集合 – 2010-11-04 10:54:37

+0

應斯特凡諾說,沒有休息。 (但我= data.count -1不算) – 2010-11-04 10:58:42

+0

@Downvoter - 謹慎解釋?我的回答有什麼不正確? – Oded 2010-11-04 11:02:53