我有一个起始长度为 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?