foreach 반복문
foreach(object obj in list)
{
DoSomthing(obj);
}
효과적이고 사용하기 쉬움
foreach문을 지원하는 타입
1. 기존타입(Array,List..)을 상속하여 사용
2. 새로운 타입 선언 가능 -> 인터페이스 구현
foreach를 지원하는 타입 정의(C#1.0)
IEnumerator e = list.getEnumerator(); // 특정 메소드를 선언하고 있다고 가정한다.
while(e.MoveNext()) // 다음 한 칸 이동하고 이동가능한지 리턴.
{
object obj = e.Current;
DoSomething(obj);
}
※ foreach를 지원하기 위해서는 다음 인터페이스를 구현하면 된다.
1. IEnumerable
public interface IEnumerable{
IEnumerator GetEnumerator();
}
2. IEnumerator
public interface IEnumerator{
object Current {get;} // object로 되어 있기 때문에 boxing, unboxing필요...
bool MoveNext(); // 어떠한 순서로 돌아가는 지 정의... 한가지 형태의 반복만 가능.
void Reset();
}
※ yield return을 통해서 컴파일러 수준에서 Enumerator를 만들어준다.
public IEnumerator GetEnumerator()
{
for(int i=0; i < Cities.Length; i++)
{
yield return Cities[i];
}
}
※ IEnumerable<string>와 같이 Generic을 이용하면 속도가 더 빠를 수 있다. boxing, unboxing없음.
Iterator 구문(2.0)
반복문 내부에서 yield 키워드 사용
C# 컴파일러가 iterator를 대신 구현해줌.
IEnumerable과 IEnumerator의 구체적인 구현 생략가능.
Generics 버전 인터페이스 : IEnumerable<T>, IEnumerator<T>
Iterator 주의사항
중첩 foreach문 사용자제 -> index를 이용한 for 반복문 사용 권장.
'C#' 카테고리의 다른 글
Nullable Type (0) | 2009.09.07 |
---|---|
Generic (0) | 2009.09.07 |
Partial Class (0) | 2009.08.29 |
C# 3장 간단 정리 (0) | 2009.07.30 |
C# 2장 간단 정리 (0) | 2009.07.30 |