IEnumerable and IEnumerator both are interfaces in C#.
IEnumerable is an interface defining a single method GetEnumerator() that returns an IEnumerator interface.
IEnumerator has two methods MoveNext() and Reset(). It also has a property called Current.
Unlike for loop, foreach loop is not specifiying the exact index A foreach statement is basically implemented by IEnumerable and IEnumerator.
A Common for loop statement:
int[] arr = new int[] {1,2,3};
for(int i = 0;i<arr.Length;i++)
{
Console.WriteLine(arr[i]);
}
Output:
1
2
3
A Common foreach statement:
int[] arr = new int[] {1,2,3};
foreach(var item in arr)
{
Console.WriteLine(item);
}
Output:
1
2
3
With IEnumerable and IEnumerator
int[] arr = new int[] {1,2,3};
IEnumerable enumerator = arr.GetEnumerator();
while(enumerator.MoveNext())
{
Console.WriteLine(enumerator.Current);
}
Output:
1
2
3
class Demo : IEnumerable, IEnumerator
{
// IEnumerable method GetEnumerator()
IEnumerator IEnumerable.GetEnumerator()
{
throw new NotImplementedException();
}
public object Current
{
get { throw new NotImplementedException(); }
}
// IEnumertor method
public bool MoveNext()
{
throw new NotImplementedException();
}
// IEnumertor method
public void Reset()
{
throw new NotImplementedException();
}
}
End –Cheng Gu