#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

解决方案 »

  1.   

    你可以写一个内部类来帮你实现IEnumerator,而在:public IEnumerator GetEnumerator() 

    return new SomeEnumerator(this); //每次foreach都返回一个新实例
    }然后在SomeEnumerator实现IEnumerator的方法,也就是MoveNext、Reset等,在GetEnumerator里面每次都返回一个实例的话,就不会受到一个foreach没有正常执行完,内部的Localtion会影响下一次了
      

  2.   

    比如:internal class SomeEnumerator
    {
          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;
    } }