
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Implementing Nested foreach Functionality in a Class
|
327
Discussion
Building functionality into a class to allow it to be iterated over using the foreach
loop is much easier now that iterators are available in Version 2.0 of the C# lan-
guage. In previous versions of the .NET Framework, you not only had to implement
the
IEnumerable interface on the type that you wanted to make enumerable, but you
also had to implement the
IEnumerator interface on a nested class. The methods
MoveNext and Reset along with the property Current then had to be written by hand
in this nested class. Iterators allow you to hand the work of writing this nested class
off to the C# compiler.
The ability for a class to be used by the
foreach loop requires the inclusion of an
iterator. An iterator can be a method, an operator overload, or the
get accessor of a
property that returns either a
System.Collections.IEnumerator,aSystem.Collections.
Generic.IEnumerator<T>
,aSystem.Collections.IEnumerable,oraSystem.Collections.
Generic.IEnumerable<T>
and that contains at least one yield statement.
Here are two examples of iterator members implemented using the
GetEnumerator
method:
IEnumerator IEnumerable.GetEnumerator( )
{
for (int index = 0; index < Count; index++)
{
yield return (someArray[index]);
}
}
IEnumerator<T> IEnumerable<T>.GetEnumerator( ...