Section 28.3: Foreach 반복문

foreachIEnumerable (IEnumerable<T> 역시 이를 상속받음에 유의한다) 을 구현 (implement) 하는 class 인스턴스 내의 일련의 값들에 대한 요소 반복을 수행할 때 사용한다. 이러한 요소 반복 가능한 대상의 예로써는 List<T>, T[] (동일 타입으로 이루어진 배열), Dictionary<TKey, TSource>, 와 같은 기본 제공 객체들 뿐만 아니라 IQueryableICollection 인터페이스들이 모두 포함된다.

문법

foreach(ItemType itemVariable in enumerableObject) statement;

추가 설명

  1. 위 문법에서 ItemType 으로 표현된 타입은 각 요소들의 타입과 정확히 일치할 필요는 없으며, 해당 요소가 할당될 수 있는 (assignable) 타입이기만 하면 무방하다.
  2. ItemType 에 실제 특정 타입을 지정하는 대신에, var 를 기술하면 enumerableObjectIEnumerable 구현 시의 generic 인자를 검사하여 적절한 요소 타입을 자동으로 추론하도록 설정할 수 있다.
  3. statement 부분은 코드 블록이나 단일 문 (statement), 심지어는 비어있는 문 (;) 도 될 수 있다
  4. 만약 enumerableObjectIEnumerable 을 구현 (implement) 하고 있지 않다면, 해당 코드는 컴파일이 되지 않을 것이다.
  5. 매 반복 수행시마다 현재의 요소값이 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

+ Recent posts