-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

エラーが示すように、コレクションは反復中に変更されますが、これは不正な操作です。

いずれにせよ、列挙子を使用して反復する正しい方法は次のとおりです。

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 に答える
1

コレクションを列挙または変更するときにコレクションをロックします。

于 2012-10-07T14:02:05.057 に答える