Click here to Skip to main content
15,897,704 members
Articles / Programming Languages / C#
Tip/Trick

How to use the IEnumerable/IEnumerator interfaces

Rate me:
Please Sign up or sign in to vote.
2.96/5 (8 votes)
3 Apr 2012CPOL1 min read 45.1K   14   5
This article describes how to work with the IEnumerable/IEnumerator interface for collection types.

Introduction

IEnumerable is an interface implemented by the System.Collecetion type in .NET that provides the Iterator pattern. The definition according to MSDN is:

“Exposes the enumerator, which supports simple iteration over non-generic collections.”

It’s something that you can loop over. That might be a List or Array or anything else that supports a foreach loop. IEnumerator allows you to iterate over List or Array and process each element one by one.

Objective

Explore the usage of IEnumerable and IEnumerator for a user defined class.

Using the code

Let’s first show how both IEnumerable and IEnumerator work: Let’s define a List of strings and iterate each element using the iterator pattern.

C#
// This is a collection that eventually we will use an Enumertor to loop through
// rather than a typical index number if we used a for loop.
string[] Continents = new string[] { "Asia", "Europe", "Africa", "North America", "South America", "Australia", "Antartica" };
 

Now we already knows how to iterate each element using a foreach loop:

C#
// Here is where loop iterate over each item of collection
foreach(string continent in Continents)
{
    Console.WriteLine(continent);
}

The same can be done with the IEnumerator object.

C#
// HERE is where the Enumerator is gotten from the List<string> object

IEnumerator enumerator = Continents.GetEnumerator()

while(enumerator.MoveNext())
{
    string continent = Convert.ToString(enumerator.Current);
    Console.WriteLine(continent);
}</string>

Points of Interest

That's the first advantage: if your methods accept an IEnumerable rather than an Array or List, they become more powerful because you can pass different kinds of objects to them.

The second and most important advantage over List and Array is, unlike List and Array, an iterator block holds a single item in memory, so if you are reading the result from a large SQL query, you can limit your memory use to a single record. Moreover this evaluation is lazy. So if you're doing a complicated work to evaluate the enumerable as you read from it, the work doesn't happen until it's asked for.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Team Leader Automation Anywhere Inc.
India India
I am Himanshu Manjarawala, Garduate in Computer Science and MCA From Veer Narmad South Gujarat University, Surat Gijarat India. Currently working as Sr. Software Developer in Automation Anywhere Softwares Pvt. Ltd. Vadodara, Gujarat

Comments and Discussions

 
GeneralMy vote of 1 Pin
BillWoodruff3-Jan-15 18:56
professionalBillWoodruff3-Jan-15 18:56 
QuestionAdd some examples Pin
Member 914033627-Sep-13 0:50
Member 914033627-Sep-13 0:50 
GeneralMy vote of 4 Pin
SaiKiran.Mandhala28-Apr-13 20:13
SaiKiran.Mandhala28-Apr-13 20:13 
SuggestionLacking important info. Inconsistent: Generic/non-Generic Pin
Matt T Heffron2-Apr-12 10:37
professionalMatt T Heffron2-Apr-12 10:37 
GeneralRe: Lacking important info. Inconsistent: Generic/non-Generic Pin
ThatsAlok2-Apr-12 19:54
ThatsAlok2-Apr-12 19:54 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.