티스토리 뷰
Series
Iterator [C#] class DaysOfTheWeek : IEnumerable - class DaysEnumerator : IEnumerator
More Code 2018. 6. 15. 20:37// C# : Iterator
using System;
using System.Collections;
namespace Iteration
{
class Program
{
static void Main(string[] args)
{
DaysOfTheWeek weekDays = new DaysOfTheWeek();
foreach (string day in weekDays)
{
Console.WriteLine(day);
}
Console.WriteLine("---- End of 1st iteration ----");
IEnumerator myEnumerator = weekDays.GetEnumerator();
while (myEnumerator.MoveNext())
{
Console.WriteLine(myEnumerator.Current);
}
Console.WriteLine("---- End of 2nd iteration ----");
myEnumerator.Reset(); // No Exception occurs
Console.WriteLine(myEnumerator.MoveNext()); // True
Console.WriteLine(myEnumerator.Current); // Sun
Console.WriteLine(myEnumerator.MoveNext()); // True
Console.WriteLine(myEnumerator.Current); // Mon
Console.WriteLine(myEnumerator.MoveNext()); // True
Console.WriteLine(myEnumerator.Current); // Tue
Console.WriteLine(myEnumerator.MoveNext()); // True
Console.WriteLine(myEnumerator.Current); // Wed
Console.WriteLine(myEnumerator.MoveNext()); // True
Console.WriteLine(myEnumerator.Current); // Thu
Console.WriteLine(myEnumerator.MoveNext()); // True
Console.WriteLine(myEnumerator.Current); // Fri
Console.WriteLine(myEnumerator.MoveNext()); // True
Console.WriteLine(myEnumerator.Current); // Sat
Console.WriteLine(myEnumerator.MoveNext()); // False
Console.WriteLine(myEnumerator.Current); // IndexOutOfRangeException
Console.WriteLine("---- End of 3rd iteration ----");
}
}
class DaysOfTheWeek : IEnumerable
{
public IEnumerator GetEnumerator()
{
return new DaysEnumerator();
}
}
class DaysEnumerator : IEnumerator
{
private string[] days = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" };
int index;
public DaysEnumerator()
{
Reset();
}
public object Current
{
get
{
return days[index];
}
}
public bool MoveNext()
{
index++;
return index < days.Length;
}
public void Reset()
{
index = -1;
}
}
}
/* Output
Sun
Mon
Tue
Wed
Thu
Fri
Sat
---- End of 1st iteration ----
Sun
Mon
Tue
Wed
Thu
Fri
Sat
---- End of 2nd iteration ----
True
Sun
True
Mon
True
Tue
True
Wed
True
Thu
True
Fri
True
Sat
False
Unhandled Exception: System.IndexOutOfRangeException
*/