我希望在显示后从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);
}
}
}}
答案 0 :(得分:2)
您无法修改您枚举的收藏集,而是可以过滤掉与您的条件不符的值,并使用ToList
创建新列表并将其分配回senderRemainingSeqList
:< / p>
senderRemainingSeqList = senderRemainingSeqList
.Where(row=> row.Key != currentSenderID &&
row.Value != senderNextSeqList[currentSenderID])
.ToList();
答案 1 :(得分:2)
您可以循环显示初始列表的 copy ,因此您可以修改它:
...
// Note ToList();
foreach (var row in senderRemainingSeqList.ToList()) {
...
}
...
答案 2 :(得分:0)
如果要在枚举期间修改集合或创建RemoveList并使用它,请使用for循环。
答案 3 :(得分:0)
尝试进行反向循环以避免在删除时出错。
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);
}
您必须向后执行此操作,否则列表可能会更改结构,并且可能会跳过条目。