DEV Community

Cover image for IEnumerable and IEnumerator in C#.
waelhabbal
waelhabbal

Posted on

IEnumerable and IEnumerator in C#.

Introduction

In C#, IEnumerable and IEnumerator are two interfaces that are used to iterate over a collection of items. These interfaces provide a standard way to iterate over any collection or sequence of items, regardless of the underlying implementation.

What is IEnumerable?

IEnumerable is an interface that represents a collection of items that can be enumerated. It defines a single method called GetEnumerator() that returns an IEnumerator. The IEnumerator can be used to iterate over the collection of items using a foreach loop.

Here's an example of using IEnumerable to iterate over a collection of integers:

IEnumerable<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

foreach (int number in numbers)
{
    Console.WriteLine(number);
}
Enter fullscreen mode Exit fullscreen mode

In this example, we create a new List<int> with five integers, and then assign it to a variable of type IEnumerable<int>. We can then use a foreach loop to iterate over the collection of integers and print each one to the console.

What is IEnumerator?

IEnumerator is an interface that allows you to move forward and backward through a collection of items, as well as retrieve the current item in the collection. This provides more fine-grained control over the iteration process, but it ismore complex to use than IEnumerable.

Here's an example of using IEnumerator to iterate over the same collection of integers:

IEnumerable<int> numbers = new List<int> { 1, 2, 3, 4, 5 };
IEnumerator<int> enumerator = numbers.GetEnumerator();

while (enumerator.MoveNext())
{
    int number = enumerator.Current;
    Console.WriteLine(number);
}
Enter fullscreen mode Exit fullscreen mode

In this example, we create a new List<int> with five integers and assign it to a variable of type IEnumerable<int>. We then create a new IEnumerator<int> by calling the GetEnumerator() method on the IEnumerable<int> variable. We can then use a while loop and the MoveNext() method of the IEnumerator<int> to iterate over the collection of integers. We retrieve the current item in the collection using the Current property of the IEnumerator<int>.

The Relationship Between IEnumerable and IEnumerator

In C#, IEnumerable and IEnumerator are closely related interfaces. IEnumerable defines a single method, GetEnumerator(), that returns an IEnumerator. The IEnumerator can then be used to iterate over the collection of items.

The foreach loop in C# uses the GetEnumerator() method of the IEnumerable interface to iterate over the collection of items. When the loop is executed, it calls the GetEnumerator() method of the collection and obtains an IEnumerator. The loop thenuses the MoveNext() method of the IEnumerator to iterate over each item in the collection and retrieve the current item using the Current property of the IEnumerator.

Here's an example that shows the relationship between IEnumerable and IEnumerator:

IEnumerable<int> numbers = new List<int> { 1, 2, 3, 4, 5 };

IEnumerator<int> enumerator = numbers.GetEnumerator();
while (enumerator.MoveNext())
{
    int number = enumerator.Current;
    Console.WriteLine(number);
}
Enter fullscreen mode Exit fullscreen mode

In this example, we create a new List<int> with five integers and assign it to a variable of type IEnumerable<int>. We then create a new IEnumerator<int> by calling the GetEnumerator() method on the IEnumerable<int> variable. We can then use the MoveNext() method of the IEnumerator<int> to iterate over the collection of integers and retrieve the current item using the Current property of the IEnumerator<int>.

The Differences Between IEnumerable and IEnumerator

The main difference between IEnumerable and IEnumerator is the level of control they provide over the iteration process. IEnumerable is used to represent a collection of items that can be enumerated, while IEnumerator provides more fine-grained control over the iteration process.

IEnumerable is simpler to use than IEnumerator, as it only defines a single method, GetEnumerator(), that returns an IEnumerator. This makesit easy to iterate over a collection of items using a foreach loop. On the other hand, IEnumerator allows you to move forward and backward through the collection, as well as retrieve the current item in the collection. This provides more control over the iteration process, but it is more complex to use than IEnumerable.

To summarize, if you just need to iterate over a collection using a foreach loop, use IEnumerable. If you need more fine-grained control over the iteration process and want to be able to move forward and backward through the collection, use IEnumerator.

Conclusion

In this post, we've covered the basics of IEnumerable and IEnumerator in C#. We've seen how these interfaces are used to iterate over a collection of items, and we've looked at the differences between them. Understanding these interfaces is important for working with collections in C#, so be sure to keep them in mind when you're working with sequences of items.

Top comments (3)

Collapse
 
fyodorio profile image
Fyodor

Never use words starting with “IE” to name interfaces for web 😅 goosebumps are real…

Collapse
 
waelhabbal profile image
waelhabbal

It's a nightmare

Collapse
 
nawafmahsoun profile image
Nawaf Mahsoun

Keep_Coding

thanks Teacher