Introduction
You can iterate over data structures such as arrays and collections using a foreach loop.
string[] cities = { "New York", "Paris", "London" };
foreach (string city in cities)
{
// Your code for each city goes here
Console.WriteLine(city);
}
In fact, you can use any custom data collection in the foreach loop, as long as that collection type implements a GetEnumerator method that returns an IEnumerator interface. Usually you do this by implementing the IEnumerable interface.
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
Iterator is one of the new feature in c# 2.0 which provide a way to create classes that can be used with foreach statement without implementing the IEnumerator & IEnumerable interfaces when compiler detects iterator it will automatically generate the current, MoveNext and dispose method of IEnumerable or IEnumerator interface. Here I explain with employees and department classes GetEnumerator method, typically by implementing IEnumerable or IEnumerable <ItemType>. You tell the compiler what to yield using the new C# yield return statement.
Employees
using System;
using System.Collections.Generic;
using System.Text;
namespace CsharpIterators
{
class Department
{
private List<Employees> _employees;
private string _name;
public string DepartmentName
{
get { return _name; }
set { _name = value; }
}
public Department(string name)
: this()
{
_name = name;
}
public Department()
{
_employees = new List<Employees>(5);
}
public void AddEmployees(Employees emp)
{
_employees.Add(emp);
}
public IEnumerator<Employees> GetEnumerator()
{
foreach (Employees emp in _employees)
yield return emp;
}
}
}
Program
using System;
using System.Collections.Generic;
using System.Text;
namespace CsharpIterators
{
class Program
{
static void Main(string[] args)
{
Employees emp1 = new Employees("Jack");
Employees emp2 = new Employees("Radu");
Employees emp3 = new Employees("Emali");
Employees emp4 = new Employees("Jecci");
Department dept = new Department("MyDepartment");
dept.AddEmployees(emp1);
dept.AddEmployees(emp2);
dept.AddEmployees(emp3);
dept.AddEmployees(emp4);
foreach (Employees emp in dept)
{
Console.WriteLine(emp.EmployeeName);
}
}
}
}