Section 28.3: Foreach 반복문
foreach
은 IEnumerable
(IEnumerable<T>
역시 이를 상속받음에 유의한다) 을 구현 (implement) 하는 class 인스턴스 내의 일련의 값들에 대한 요소 반복을 수행할 때 사용한다. 이러한 요소 반복 가능한 대상의 예로써는 List<T>
, T[]
(동일 타입으로 이루어진 배열), Dictionary<TKey, TSource>
, 와 같은 기본 제공 객체들 뿐만 아니라 IQueryable
와 ICollection
인터페이스들이 모두 포함된다.
문법
foreach(ItemType itemVariable in enumerableObject)
statement;
추가 설명
- 위 문법에서
ItemType
으로 표현된 타입은 각 요소들의 타입과 정확히 일치할 필요는 없으며, 해당 요소가 할당될 수 있는 (assignable) 타입이기만 하면 무방하다. ItemType
에 실제 특정 타입을 지정하는 대신에,var
를 기술하면enumerableObject
의IEnumerable
구현 시의 generic 인자를 검사하여 적절한 요소 타입을 자동으로 추론하도록 설정할 수 있다.statement
부분은 코드 블록이나 단일 문 (statement), 심지어는 비어있는 문 (;
) 도 될 수 있다- 만약
enumerableObject
이IEnumerable
을 구현 (implement) 하고 있지 않다면, 해당 코드는 컴파일이 되지 않을 것이다. - 매 반복 수행시마다 현재의 요소값이
ItemType
(명시적으로 지정되지 않고 컴파일러에 의해 추론되도록var
가 사용되었다 하더라도) 으로 타입 변환 (cast) 되며 이러한 변환이 불가능할 경우InvalidCastException
예외가 발생할 것이다.
아래 예제를 확인한다:
var list = new List < string > ();
list.Add("Ion");
list.Add("Andrei");
foreach(var name in list) {
Console.WriteLine("Hello " + name);
}
위 예제는 아래 코드와 동일하다:
var list = new List < string > ();
list.Add("Ion");
list.Add("Andrei");
IEnumerator enumerator;
try {
enumerator = list.GetEnumerator();
while (enumerator.MoveNext()) {
string name = (string) enumerator.Current;
Console.WriteLine("Hello " + name);
}
} finally {
if (enumerator != null)
enumerator.Dispose();
}
본 문서는 C# Notes for Professionals (라이센스:CC-BY-SA) 를 한글로 번역한 문서입니다. 번역상 오류가 있을 수 있으므로 정확한 내용은 원본 문서를 참고하세요.
[출처] https://books.goalkicker.com/CSharpBook/
반응형
'번역 > C# Notes for Professionals' 카테고리의 다른 글
28.5: 중첩 (nested) 반복문 (0) | 2021.09.15 |
---|---|
28.4: 다양한 스타일의 반복문들 (0) | 2021.09.15 |
28.2: Do - While 반복문 (0) | 2021.09.03 |
28.1: For 반복문 (0) | 2021.08.27 |
27.8: Queue<T> (0) | 2021.08.27 |