
This is the Title of the Book, eMatter Edition
Copyright © 2007 O’Reilly & Associates, Inc. All rights reserved.
Implementing Iterators as Overloaded Operators
|
343
See Also
See the “Iterators,” “IEnumerator Interface,” and “IEnumerable Interface” topics in
the MSDN documentation.
6.7 Implementing Iterators as Overloaded Operators
Problem
You need the ability to iterate over two or more collections and enumerate all ele-
ments in each set using a foreach loop construct. In addition to this, you also want to
be able to iterate over the unique elements in each set and the duplicate elements in
each set.
Solution
Create overloaded operators that act as iterators. The following code shows how to
set up an iterator on an overloaded
+ operator:
public static IEnumerable<T> operator +(IEnumerable<T> lhs, IEnumerable<T> rhs)
{
foreach (T t in lhs)
{
yield return (t);
}
foreach (T t in rhs)
{
yield return (t);
}
}
We will use the previous code example in creating a Set class, shown in
Example 6-5, which makes use of the familiar
GetEnumerator iterator method, but
also overloads the
+, |, and & operators for use as iterators.
Example 6-5. Implementing iterators as overloaded operators (+, |, and &)
public class Set<T>
{
private List<T> _items = new List<T>( );
public void AddItem(T name)
{
if (!_items.Contains(name))
_items.Add(name);
else
throw (new ArgumentException("This value can only be added to a set once.", ...