제목 없음

열거

Untitled

IEnumerable과 IEnumerator

public interface IEnumerator
{
  bool MoveNext();
  object Current { get; }
  void Reset();
}
public interface IEnumerable
{
  IEnumerator GetEnumerator();
}
string s = "Hello";

// string은 IEnumerable을 구현하므로 GetEnumerator를 호출할 수 있다.
IEnumerator rator = s.GetEnumerator();

while (rator.MoveNext())
{
  char c = (char) rator.Current;
  Console.Write(c + ".");
}

// output: H.e.l.l.o.

// 보통은 열거자의 메서드를 직접 호출하지 않고 foreach문을 사용한다.
foreach(char c in s)
  Console.Write(c + ".");

IEnumerable<T>와 IEumerator<T>

public interface IEnumerator<T> : IEnumerator, IDisposable
{
  T Current { get; }
}

public interface IEnumerable<T> : IEnumerable
{
  IEnumerator<T> GetEnumerator();
}