【发布时间】:2018-03-11 00:18:29
【问题描述】:
我有一个遍历对象列表的方法,如果它找到一个符合某个条件的对象,它应该删除它:
public static void MakeChanges(MappingFileModel modelWithChanges)
{
foreach (var mapping in Mapping)
{
if (mapping.ScanIndex.Equals(modelWithChanges.ScanIndex))
{
if (modelWithChanges.Column == -1)
{
Mapping.Remove(mapping);
}
}
}
}
相当简单,我想:该方法采用名为modelWithChanges 的MappingFileModel 实例,然后遍历列表,找到ScanIndex 字符串匹配的实例。然后它检查Column == -1,(为简洁起见,我删除了else 语句以获取其他选项)。所以,如果这两个if 语句的计算结果为true,我想从Mapping 列表中删除mapping。
问题是,它不会删除它。我也不会抛出错误。它只是不这样做。如果我设置断点,它确实会命中语句。我也试过:
Mapping.RemoveAt(Mapping.IndexOf(mapping));
这会导致索引超出范围错误,这表明我的代码无法在Mapping 中找到mapping。这没有任何意义,因为我正在迭代 Mapping?
更新:
感谢指出另一篇文章...我将代码编辑为以下内容:
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);
}
}
}
}
它仍然没有删除那个对象......
更新 2:
好的,所以我现在更进一步并在循环外创建了一个变量......它仍然没有删除该对象。在那里。没有错误。
public static void MakeChanges(MappingFileModel modelWithChanges)
{
var deleteIndex = -1;
for (var i =0; i<Mapping.Count; i++)
{
if (Mapping[i].ScanIndex.Equals(modelWithChanges.ScanIndex))
{
if (modelWithChanges.Column == -1)
{
deleteIndex = i;
}
}
}
if (deleteIndex != -1)
{
Mapping.RemoveAt(deleteIndex);
}
}
【问题讨论】: