【问题标题】:Unable to remove object from list in C# [duplicate]无法从 C# 中的列表中删除对象 [重复]
【发布时间】: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);
            }
        }
    }
}

相当简单,我想:该方法采用名为modelWithChangesMappingFileModel 实例,然后遍历列表,找到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);
        }
    }

【问题讨论】:

    标签: c# list


    【解决方案1】:

    在使用foreach 迭代集合时,您不能对集合进行更改。如果您想更新它,请尝试使用for 循环。

    更多详情,请参考this

    【讨论】:

    • 谢谢(捂脸)。我忘了!
    • 感谢 diiN_______ 和 HimBromBeere,他没有查看问题,而是将其标记为重复...我发现了这个错误,它与我提供的代码无关。对于那些正在寻找解决方案的人,如果他们遇到这个问题:问题出在列表本身。它是一个类的静态属性,无论何时请求,getter 都会不断刷新列表的内容。不管我多久更改一次列表,getter 总是会再次刷新它。
    猜你喜欢
    • 1970-01-01
    • 2012-01-09
    • 1970-01-01
    • 2017-06-23
    • 1970-01-01
    • 2015-08-02
    • 2018-12-04
    • 1970-01-01
    相关资源
    最近更新 更多