使用C#中的IEnumerator从集合中删除元素

时间:2016-06-22 04:23:38

标签: c#

我需要从列表中删除元素<>在C#中。从之前提供的答案中,似乎必须在集合中向后循环以实现此目的。但是,我有一个IEnumerator迭代列表的元素。 代码如下:

        IEnumerator<Solution> iterator = solutionsList_.GetEnumerator();
        while (iterator.MoveNext())
        {

            Solution element = iterator.Current;
            int flag = dominance_.Compare(solution, element);
            if (flag == -1) { // The Individual to insert dominates other
                // individuals in the archive
                iterator.Remove();} // Delete it from the archive

如果我能从列表中删除元素,那将非常有用&lt;&gt;以及使用枚举器。

3 个答案:

答案 0 :(得分:3)

由于您有List<T>,因此没有理由明确获取枚举数。您可以使用常规循环,然后向后 - 您可以删除元素而不会出现任何问题,以下是代码示例:

var solutionsList_ = new List<int>();
for (var i = solutionsList_.Count - 1; i >= 0; i--)
{
    var element = solutionsList_[i];
    //if (Some logic)
    {
        solutionsList_.RemoveAt(i);
    }
}

答案 1 :(得分:2)

IEnumerable只能枚举,你不能添加/删除它的项目。

您可以使用ICollection添加/删除项目,您可以尝试将IEnumerable投射到ICollection,因为List实现了ICollection。

http://msdn.microsoft.com/en-us/library/system.collections.ienumerable.aspx

答案 2 :(得分:0)

我认为你的情况很复杂。您可以直接在List上申请LINQ extension methods。因此,您只需使用以下代码从列表中删除项目:

List<Solution> solutionsList_ = new List<Solution>() { };
// Populate the list here
var itemsToRemove = solutionsList_.Where(x => dominance_.Compare(solution, x) == -1);
foreach (var item in itemsToRemove)
{
    solutionsList_.Remove(item);
}