0

我有一个起始长度为 4 的对象数组,每次 Add 方法达到长度时,长度加倍。该数组实现了 IEnumerable:

 public ObjectArrayCollection()
    {
        this.objectArray = new object[ObjectArrayCapacity];
        Count = 0;
    }

    public int Count { get; protected set; }

    public object this[int index]
    {
        get => this.objectArray[index];
        set => this.objectArray[index] = value;
    }

    IEnumerator IEnumerable.GetEnumerator()
    {
        return GetEnumerator();
    }

    public ObjectArrayEnumeration GetEnumerator()
    {
        return new ObjectArrayEnumeration(objectArray);
    }

和一个实现 IEnumeration 的类:

 public ObjectArrayEnumeration(object[] objectArray)
    {
        this.objectArray = objectArray;
    }
    public object Current
    {
        get
        {
            try
            {
                return objectArray;
            }
            catch (IndexOutOfRangeException)
            {
                throw new InvalidOperationException();
            }
        }
    }
    public bool MoveNext()
    {
        position++;
        return position < objectArray.Length;
    }
    public void Reset()
    {
        position = -1;
    }

“possition < objectArray.length”条件不好,因为如果添加的对象未填充数组,objectArray 可以包含 null。我将计数发送给枚举器:

public ObjectArrayEnumeration GetEnumerator()
    {
        return new ObjectArrayEnumeration(objectArray, Count);
    }

但是因为我需要它们,所以我被告知枚举器应该封装 objectArray。我试过这个:

public IEnumerator GetEnumerator()
    {
        return objectArray.GetEnumerator();
    }

但这样我就不会枚举这些值。我是 C# 和学习的新手,但我已经没有想法了。枚举器如何封装objectArray?

4

0 回答 0