【问题标题】:List collection was modified - Error when trying to use foreach loop列表集合已修改 - 尝试使用 foreach 循环时出错
【发布时间】:2019-08-03 19:30:47
【问题描述】:

我正在尝试修改 List 集合 List<DataClass> 的值中的一些值。我试图修改的值 listValues[i].destinationValuelistValues[i].sourceKey 这也是一个列表集合。当我尝试向集合添加另一个值时,它使用 foreach 循环工作。但是当它进入 foreach 循环值中的下一个值时,它会停止并且我得到错误:System.InvalidOperationException: 'Collection was modified;.

foreach (var listValue in listValues)
{
    if (listValue.hostName == data[4] && listValue.description == data[3] && listValue.ruleName == data[2])
    {
        var i = listValues.FindIndex(x => x.hostName.Equals(listValue.hostName));
        listValues[i].destinationValue.Add(data[0]);
        listValues[i].sourceKey.Add(data[1]);
    }
    else
    {
        listValues.Add(docValueModelClass);
    }
}

if (listValues.Count == 0)
{
    listValues.Add(docValueModelClass);
}

您能否建议,我该如何克服这个问题?

【问题讨论】:

  • foreach变成for循环
  • for (int i = 0; i < listValues.Count; ++i) { var listValue = listValues[i]; /* loop body here */ }
  • foreach (var listValue in listValues) 更改为foreach (var listValue in listValues.ToArray())。然后你枚举不同的列表/数组。
  • @DmitryBychenko:使用你的建议效果很好。感谢您的帮助!

标签: c# list


【解决方案1】:

您不能在 foreach 循环中编辑相同的列表或相同的枚举列表,因为我们使用相同的列表进行枚举。

只需使用 for 循环进行编辑 - 它可以工作。

【讨论】:

    猜你喜欢
    • 2013-10-09
    • 2010-11-10
    • 2015-03-03
    • 2014-09-19
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 2011-09-11
    • 2018-02-17
    相关资源
    最近更新 更多