簡體   English   中英

在列表的Foreach循環中刪除鍵值對

[英]Remove Key Value Pair in Foreach Loop in List

我想在顯示列表后從列表中刪除一個鍵-值對,但這給了我錯誤消息,例如[集合已被修改; 枚舉操作可能無法執行。 例外]

這是代碼

if (senderRemainingSeqList.Count > 0)
{
      senderRemainingSeqList.Sort();

      foreach (var row in senderRemainingSeqList)
      {
          if ( row.Key == currentSenderID)
          {
               if (row.Value == senderNextSeqList[currentSenderID])
               {
                 Console.WriteLine("{0} {1}",row.Key,row.Value);
                  senderRemainingSeqList.Remove(row);
               }
         }
}}

您不能修改要枚舉的集合,而是可以過濾出不符合條件的值,並使用ToList創建新列表並將其分配回senderRemainingSeqList

senderRemainingSeqList = senderRemainingSeqList
                .Where(row=> row.Key != currentSenderID && 
                 row.Value != senderNextSeqList[currentSenderID])
                .ToList();

您可以循環訪問初始列表的副本 ,因此可以對其進行修改:

  ...
  // Note ToList(); 
  foreach (var row in senderRemainingSeqList.ToList()) {
    ...
  }
  ...

如果要在枚舉期間修改集合或創建RemoveList並使用它,請使用for循環。

嘗試進行反向循環,以免在移除時出錯。

for(int i = list.Count -1; i >= 0; --i)
{ 
    // Determine if this is the pair you want to remove
    if(list[i].key == keyToRemove)
         list.RemoveAt(i);
}

您必須向后執行此操作,否則列表可能會更改結構,並且條目可能會被跳過。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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