簡體   English   中英

從集合中刪除對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM