-2

代码:

public List<Interfaces.Test> IJ_;
IEnumerator<Interfaces.Test> Ij_ = Objects.GetEnumerator();
int count = IJ_.Count;
Ij_.MoveNext();
for (int x = 0; x < count; x++)
{
    if (x >= count)
        break;
    Test MyBase = IJ_.Current;
    if (MyBase == null)
        obj_.MoveNext(); //here the error
}

错误:

System.InvalidOperationException: Collection was modified; enumeration operation may not execute.
at System.ThrowHelper.ThrowInvalidOperationException(ExceptionResource resource)
at System.Collections.Generic.List`1.Enumerator.MoveNextRare()
at System.Collections.Generic.List`1.Enumerator.MoveNext()

请帮我。

4

2 回答 2

1

枚举时锁定集合或对集合进行更改。

于 2012-10-07T14:02:05.057 回答
1

正如错误所说,在迭代期间修改了集合,这是非法操作。

无论哪种方式,使用枚举器进行迭代的正确方法是:

var Ij_ = Objects.GetEnumerator();

while (Ij.MoveNext())
{
    Test MyBase = IJ_.Current;

    // I understood that you want to skip null elements, so...
    if (MyBase == null)
    {
        continue;
    }

    // ...
}

您应该确保在迭代期间不添加、删除或设置集合中的项目(不在循环中,也不在不同的线程中)。允许更改元素的内部状态。

如果枚举器是您的实现,并且在确保迭代期间未修改集合之后仍然发生错误,那么发布枚举器的代码也可能会有所帮助。

于 2012-10-07T14:16:07.147 回答