1 回答

TA貢獻2012條經驗 獲得超12個贊
您所引用的文章的代碼有問題。
_objects是類的私有成員,List因此不能在類外部訪問它,即使是從List.
即使您_objects公開,如果不創建類對象也無法訪問它List。
也沒有辦法IEnumerable修改界面。
我建議遵循兩種方法。
方法一
更改ListEnumerator類構造函數以接受List類的對象
private class ListEnumerator : IEnumerator
{
private List _list;
public ListEnumerator(List list)
{
this._list = list;
}
private int _currentIndex = -1;
public bool MoveNext()
{
_currentIndex++;
return (_currentIndex < this._list._objects.Length);
}
public object Current
{
get
{
try
{
return this._list._objects[_currentIndex];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
public void Reset()
{
_currentIndex = -1;
}
}
您還需要從in classprivate的聲明中刪除。并傳遞給 ListEnumerator 構造函數。_objectsListthis
public class List : IEnumerable
{
object[] _objects;
public List()
{
_objects = new object[100];
}
//Other code of List class.
public IEnumerator GetEnumerator()
{
return new ListEnumerator(this);
}
}
方法二
更改ListEnumerator類構造函數以接受對象數組。
private class ListEnumerator : IEnumerator
{
private object[] _objects;
public ListEnumerator(object[] objects)
{
this._objects = objects;
}
private int _currentIndex = -1;
public bool MoveNext()
{
_currentIndex++;
return (_currentIndex < this._objects.Length);
}
public object Current
{
get
{
try
{
return this._objects[_currentIndex];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
public void Reset()
{
_currentIndex = -1;
}
}
并在 List 類中使用它。
public IEnumerator GetEnumerator()
{
return new ListEnumerator(this._objects);
}
- 1 回答
- 0 關注
- 121 瀏覽
添加回答
舉報