En général, vous ne devriez pas avoir besoin de mettre en œuvre IEnumerable vous plus. il existe de nombreuses classes intégrées dans le cadre qui mettent en œuvre cette interface est de différentes manières de satisfaire 99% de vos besoins. Cependant, si vous le souhaitez, la méthode IEnumerable, GetEnumerator() est celle qui retournera un objet IEnumerator à un client appelant foreach. Cet objet Ienumerator est l'objet qui garde la trace de l'élément de la collection. suivant "un à être retourné quand le foreach" itère ". Pour que cela fonctionne, vous devez définir une classe qui sera celle recenseur (Il doit mettre en œuvre IEnumerator ou génériquement IEnumerator)
À titre d'exemple (pour un PersonCollection)
public IEnumerator GetEnumerator() { return new myTypeEnumerator(this); }
public class myTypeEnumerator : IEnumerator
{
int nIndex;
PersonCollection pers;
public myTypeEnumerator(PersonCollection myTypes)
{ pers = myTypes; nIndex = -1; }
public bool MoveNext() { return (++nIndex < pers.alPers.Count); }
public object Current { get { return (pers[nIndex]); } }
public void Reset() { nIndex = -1; }
}
La seule différence entre cette et la version générique est que la version générique est fortement typée:
public IEnumerator<T> GetEnumerator() { return new myTypeEnumerator<T>(this); }
public class myTypeEnumerator<T> : IEnumerator<T>
{
int nIndex;
IList<T> tList;
public myTypeEnumerator(IList<T> listOfTs)
{
tList = listOfTs;
nIndex = -1;
}
public bool MoveNext() { return (++nIndex < tList.Count); }
public T Current { get { return (tList[nIndex]); } }
public void Reset() { nIndex = -1; }
}
double possible de [. Message d'erreur concernant IEnumerable.GetEnumerator()] (http://stackoverflow.com/questions/2981615/error-message- concernant-ienumerable-getenumerator) –
Wow. Vous êtes géniaux les gars! Merci pour l'aide. Oui, ce que j'ai fait était de retourner GetEnumerator() dans la méthode non générique. – Abe