3.34. Creating Custom Enumerators
Problem
You need to add
foreach
support to a class, but the normal way of
adding an IEnumerator
class is not flexible
enough. Instead of simply iterating from the first element to the
last, you also need to iterate from the last to the first, and you
need to be able to step over, or skip, a predefined number of
elements on each iteration. All of these types of iterators should be
available to your class.
Solution
The following interfaces allow polymorphic use of the
foreach
method:
using System.Collections; public interface IRevEnumerator { IEnumerator GetEnumerator( ); } public interface IStepEnumerator { IEnumerator GetEnumerator( ); }
The following class acts as a container for a private
ArrayList
called InternalList
and is used in the foreach
loop to iterate through
the private
InternalList
:
public class Container : IEnumerable, IRevEnumerator, IStepEnumerator { public Container( ) { // Add dummy data to this class internalList.Add(-1); internalList.Add(1); internalList.Add(2); internalList.Add(3); internalList.Add(4); internalList.Add(5); internalList.Add(6); internalList.Add(7); internalList.Add(8); internalList.Add(9); internalList.Add(10); internalList.Add(200); internalList.Add(500); } private ArrayList internalList = new ArrayList( ); private int step = 1; IEnumerator IEnumerable.GetEnumerator( ) { return (new ContainerIterator(this)); } IEnumerator IRevEnumerator.GetEnumerator( ) { return (new RevContainerIterator(this)); } IEnumerator ...
Get C# Cookbook now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.