我有一个迭代对象列表的方法,如果找到一个匹配某个标准的方法,它应该删除它:
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);
}
}
}
}
答案 0 :(得分:1)
使用foreach
进行迭代时,无法对集合进行更改,如果要更新集合,请尝试使用for
循环。
有关详细信息,请参阅 -