Hacer una clase enumerable con foreach
Artículo por Club Developers · 28 August 2006
2056 vistas
Puede ser interesante hacer una clase que pueda ser recorrida mediante un foreach. Para ello es necesario que la clase pueda proveer un objeto IEnumerator y que implemente la interfaz IEnumerable para sobrecargar los métodos MoveNext y Reset y permitiendo el acceso a la propiedad Current.
Veamos el ejemplo de una clase MyString que lo implementa (esto sólo sirve de ejemplo ya que la clase String ya lo permite).
Hay que resaltar el método GetEnumerator que devuelve this.
Otra solución podrÃa ser usar una estructura nested impementando IEnumerator.
Veamos el ejemplo de una clase MyString que lo implementa (esto sólo sirve de ejemplo ya que la clase String ya lo permite).
csharp
public class MyString : IEnumerable, IEnumerator {   private  string string_;   private  int i;   public MyString()   {     string_ = "";     i = -1;   }   public MyString(string c)   {     string_ = c;     i = -1;   }   public virtual bool MoveNext()   {     if ( i < string_.Length - 1 )     {       i++;       return true;     }     return false;   }   public virtual void Reset() {}   public Object Current   {     get     {       return string_[i];     }   }   public virtual IEnumerator GetEnumerator()   {     return this;   } }
Hay que resaltar el método GetEnumerator que devuelve this.
Otra solución podrÃa ser usar una estructura nested impementando IEnumerator.