我创建了一个实现 IEnumerable(T) 和自定义 IEnumerator(T) 的自定义集合。

我还在自定义集合中添加了一个 Add() 方法,如下所示:

public void Add(T item)
{
    T[] tempArray = new T[_array.Length + 1];

    for (int i = 0; i < _array.Length; i++)
    {
        tempArray[i] = _array[i];
    }

    tempArray[_array.Length] = item;

    _array = tempArray;
    tempArray = null;
}

该实现基于此示例 http://msdn.microsoft.com/en-us/library/system.collections.ienumerator.aspx

当我对数组执行 foreach 循环时,我想防止集合修改(例如在循环内调用 Add())并抛出一个新的 InvalidOperationException。我怎么能做到这一点?

最佳答案

你需要在你的类(class)中有一个版本 ID。在进入 Add 时增加它。当你创建一个迭代器(在 GetEnumerator() 调用中)你会记住版本号 - 在每次迭代时,你会检查版本号是否仍然是它开始时的版本号,否则抛出。

关于C# 自定义迭代器实现 - 防止在 foreach 循环期间修改集合,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8154012/

10-12 16:28