无法从C#中的列表中删除对象

时间:2017-09-29 06:31:28

标签: c# list

我有一个迭代对象列表的方法,如果找到一个匹配某个标准的方法,它应该删除它:

public static void MakeChanges(MappingFileModel modelWithChanges)
{
    foreach (var mapping in Mapping)
    {
        if (mapping.ScanIndex.Equals(modelWithChanges.ScanIndex))
        {
            if (modelWithChanges.Column == -1)
            {
                Mapping.Remove(mapping);
            }
        }
    }
}

相当简单,我原以为:该方法采用名为MappingFileModel的{​​{1}}实例,然后遍历列表,找到modelWithChanges字符串匹配的实例。然后检查是否ScanIndex,(我为了简洁而删除了其他选项的Column == -1语句)。因此,如果这两个else语句评估为if,我想从列表true中删除mapping

问题是,它不会删除它。我也没有抛出错误。它只是不这样做。如果我设置断点,它确实符合声明。我也尝试过:

Mapping

通过索引超出范围错误,这表示我的代码无法在Mapping.RemoveAt(Mapping.IndexOf(mapping)); 中找到mapping。这没有任何意义,因为我正在迭代Mapping

更新

感谢指出另一篇文章......我编写了以下代码:

Mapping

它仍然没有删除该对象......

更新2:

好的,所以我现在更进了一步,在循环外创建了一个变量......它仍然没有删除该对象。在那。没有错误。

public static void MakeChanges(MappingFileModel modelWithChanges)
    {
        for (var i = 0; i<Mapping.Count; i++)
        {
            if (Mapping[i].ScanIndex.Equals(modelWithChanges.ScanIndex))
            {
                if (modelWithChanges.Column == -1)
                {
                    Mapping.RemoveAt(i);
                }
            }
        }
    }

1 个答案:

答案 0 :(得分:1)

使用foreach进行迭代时,无法对集合进行更改,如果要更新集合,请尝试使用for循环。

有关详细信息,请参阅 -

https://social.msdn.microsoft.com/Forums/vstudio/en-US/a90c87be-9553-4d48-9892-d482ee325f02/why-cant-change-value-in-foreach?forum=csharpgeneral