Can anyone explain IEnumerable and IEnumerator to me?
What are the differences between IEnumerator and IEnumerable?
IEnumerable is an interface that defines one method GetEnumerator which returns an IEnumerator interface, this in turn allows readonly access to a collection. A collection that implements IEnumerable can be used with a foreach statement.
IEnumerable public IEnumerator GetEnumerator(); IEnumerator public object Current; public void Reset(); public bool MoveNext();
IEnumerator is a thing that can enumerate: it has the
Current property and the
Reset methods (which in .NET code you probably won't call explicitly, though you could).
IEnumerable is a thing that can be enumerated...which simply means that it has a GetEnumerator method that returns an
Which do you use? The only reason to use
IEnumerator is if you have something that has a nonstandard way of enumerating (that is, of returning its various elements one-by-one), and you need to define how that works. You'd create a new class implementing
IEnumerator. But you'd still need to return that
IEnumerator in an
For a look at what an enumerator (implementing
IEnumerator<T>) looks like, see any
Enumerator<T> class, such as the ones contained in
Stack<T>. For a look at a class implementing
IEnumerable, see any standard collection class.