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 关注
- 98 浏览
添加回答
举报