이름공간 내용
System.Collections 비제네릭 컬렉션 클래스들과 인터페이스들
System.Collections.Specialized 강한 형식의 비제네릭 컬렉션 클래스들
System.Collections.Generic 제네릭 컬렉션 클래스들과 인터페이스들
System.Collections.ObjectModel 커스텀 컬렉션을 위한 프록시들과 기반 클래스들
System.Collections.Concurrent 스레드에 안전한 컬렉션들

열거

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();
}