[英]Remove an object from a collection
如果對象不滿足某些條件,我想從集合中刪除該對象
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);
}
}
除了可以從集合中刪除對象之外,您還可以創建一個新的過濾集合:
var filteredList = infData.Where(x => x.Id != 0);
並在舊GC超出范圍時留給GC照顧。 您還提到了ArrayList。 除非您使用的是.NET 1.1或更早版本,否則絕對沒有理由使用ArrayList
。 通用集合會更合適。
對於List
請執行以下操作:
infData = infData.RemoveAll(p => p.Id == 0)
通常,您可以這樣做(適用於枚舉):
enumerable = enumerable.Except(enumerable.Where(p => p.Id == 0));
如果要從集合中刪除項目,請不要使用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);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.