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