1 回答

TA貢獻(xiàn)2012條經(jīng)驗(yàn) 獲得超12個(gè)贊
您所引用的文章的代碼有問題。
_objects是類的私有成員,List因此不能在類外部訪問它,即使是從List.
即使您_objects公開,如果不創(chuàng)建類對(duì)象也無法訪問它List。
也沒有辦法IEnumerable修改界面。
我建議遵循兩種方法。
方法一
更改ListEnumerator類構(gòu)造函數(shù)以接受List類的對(duì)象
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 構(gòu)造函數(shù)。_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類構(gòu)造函數(shù)以接受對(duì)象數(shù)組。
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 關(guān)注
- 126 瀏覽
添加回答
舉報(bào)