0% found this document useful (0 votes)
35 views2 pages

Ienumerable: Section 30.1: Ienumerable With Custom Enumerator

The document discusses the IEnumerable and IEnumerator interfaces in C#. IEnumerable allows classes to be enumerated like collections and requires implementing an enumerator to track state. IEnumerable is the base for non-generic collections while IEnumerator is the base for generic enumerators. The document also provides an example of implementing IEnumerable with a custom enumerator to iterate over a hardcoded list of coffee drinks.

Uploaded by

Sammy Mwambezi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
35 views2 pages

Ienumerable: Section 30.1: Ienumerable With Custom Enumerator

The document discusses the IEnumerable and IEnumerator interfaces in C#. IEnumerable allows classes to be enumerated like collections and requires implementing an enumerator to track state. IEnumerable is the base for non-generic collections while IEnumerator is the base for generic enumerators. The document also provides an example of implementing IEnumerable with a custom enumerator to iterate over a hardcoded list of coffee drinks.

Uploaded by

Sammy Mwambezi
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as DOCX, PDF, TXT or read online on Scribd

IEnumerable

IEnumerable is the base interface for all non-generic collections like ArrayList that can be enumerated.
IEnumerator<T> is the base interface for all generic enumerators like List<>.
IEnumerable is an interface which implements the method GetEnumerator. The GetEnumerator method
returns an
IEnumerator which provides options to iterate through the collection like foreach.

Section 30.1: IEnumerable with custom Enumerator


Implementing the IEnumerable interface allows classes to be enumerated in the same way as BCL
collections. This
requires extending the Enumerator class which tracks the state of the enumeration.
Other than iterating over a standard collection, examples include:
Using ranges of numbers based on a function rather than a collection of objects
Implementing different iteration algorithms over collections, like DFS or BFS on a graph collection
public static void Main(string[] args) {
foreach (var coffee in new CoffeeCollection()) {
Console.WriteLine(coffee);
}
}
public class CoffeeCollection : IEnumerable {
private CoffeeEnumerator enumerator;
public CoffeeCollection() {
enumerator = new CoffeeEnumerator();
}
public IEnumerator GetEnumerator() {
return enumerator;
}
public class CoffeeEnumerator : IEnumerator {
string[] beverages = new string[3] { "espresso", "macchiato", "latte" };
int currentIndex = -1;
public object Current {
get {
return beverages[currentIndex];
}
}
public bool MoveNext() {
currentIndex++;
if (currentIndex < beverages.Length) {
return true;
}
return false;
}
public void Reset() {
currentIndex = 0;
}
GoalKicker.com – C# Notes for Professionals 128
}
}

Section 30.2: IEnumerable<int>


In its most basic form, an object that implements IEnumerable represents a series of objects. The
objects in
question can be iterated using the c# foreach keyword.
In the example below, the object sequenceOfNumbers implements IEnumerable. It represents a series of
integers.
The foreach loop iterates through each in turn.
int AddNumbers(IEnumerable<int> sequenceOfNumbers) {
int returnValue = 0;
foreach(int i in sequenceOfNumbers) {
returnValue += i;
}
return returnValue;
}

You might also like