#region 集合实现
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
} public object Current
{
// 得到集合当前的元素
get
{
CFileItem item = (CFileItem)this.m_Files[this.m_Location - 1]; return (object)item;
}
}
public void Reset()
{
this.m_Location = 0;
}
public bool MoveNext()
{
this.m_Location++; if (this.m_Location > this.m_Files.Count)
{
this.m_Location = 0;
return false;
}
else
return true;
}
#endregion
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
} public object Current
{
// 得到集合当前的元素
get
{
CFileItem item = (CFileItem)this.m_Files[this.m_Location - 1]; return (object)item;
}
}
public void Reset()
{
this.m_Location = 0;
}
public bool MoveNext()
{
this.m_Location++; if (this.m_Location > this.m_Files.Count)
{
this.m_Location = 0;
return false;
}
else
return true;
}
#endregion
{
return new SomeEnumerator(this); //每次foreach都返回一个新实例
}然后在SomeEnumerator实现IEnumerator的方法,也就是MoveNext、Reset等,在GetEnumerator里面每次都返回一个实例的话,就不会受到一个foreach没有正常执行完,内部的Localtion会影响下一次了
{
private YourClass _data;
public SomeEunmerator( YourClass obj )
{
_data = obj;
} public object Current
{
// 得到集合当前的元素
get
{
CFileItem item = (CFileItem)_data.m_Files[this.m_Location - 1]; return (object)item;
}
}
public void Reset()
{
_data.m_Location = 0;
}
public bool MoveNext()
{
_data.m_Location++;
if (_data.m_Location > _data.m_Files.Count)
{
_data.m_Location = 0;
return false;
}
else
return true;
} }