Array.GetEnumerator메서드
Array에 대한IEnumerator를 반환합니다.
[C#]public virtualIEnumeratorGetEnumerator();
[C++]public: virtualIEnumerator*GetEnumerator();
[JScript]public functionGetEnumerator() :IEnumerator;
반환 값
Array에 대한IEnumerator입니다.
구현
설명
열거자에서는 컬렉션의 데이터를 읽기만 할 수 있습니다. 열거자를 사용하여 내부 컬렉션을 수정할 수 없습니다.
처음에는 열거자가 컬렉션의 첫 번째 요소 앞에 배치됩니다. 그러면Reset은 열거자를 이 위치로 다시 가져옵니다. 이 위치에서Current를 호출하면 예외가 throw됩니다. 따라서Current의 값을 읽기 전에MoveNext를 호출하여 열거자를 해당 컬렉션의 첫 번째 요소로 보내야 합니다.
Current에서는MoveNext또는Reset이 호출될 때까지 동일한 개체를 반환합니다.MoveNext는Current를 다음 요소로 설정합니다.
컬렉션의 끝이 전달된 후 열거자는 컬렉션의 마지막 요소 뒤에 배치되고MoveNext를 호출하면false가 반환됩니다.MoveNext에 대한 마지막 호출에서false가 반환된 경우Current를 호출하면 예외가 throw됩니다.Current를 해당 컬렉션의 첫 번째 요소로 다시 설정하려면Reset을 호출한 다음MoveNext를 호출하면 됩니다.
열거자는 컬렉션이 변경되지 않은 상태로 유지되는 한 유효합니다. 그러나 요소를 추가, 수정, 삭제하는 등 컬렉션을 변경하면 열거자는 더 이상 유효하지 않으며(복구할 수 없음) 다음에MoveNext또는Reset을 호출하면InvalidOperationException이 throw됩니다.MoveNext와Current사이에서 컬렉션이 수정되면Current는 열거자가 이미 유효하지 않더라도 자신이 설정한 요소를 반환합니다.
열거자는 컬렉션에 독점적으로 액세스할 수 있는 권한이 없으므로 컬렉션을 열거하는 프로시저는 기본적으로 스레드로부터 안전하지 않습니다. 동기화된 컬렉션을 다른 스레드에서 수정할 수는 있지만, 이렇게 하면 열거자에서 예외가 throw됩니다. 열거하는 동안 스레드로부터 안전을 보장하려면 전체 열거를 수행하는 동안 컬렉션을 잠그거나 다른 스레드에서 변경된 내용으로 인해 발생한 예외를 catch하면 됩니다.
'dev, tech > Windows P' 카테고리의 다른 글
이벤트(event) (0) | 2006.01.18 |
---|---|
델리게이트(Delegate) : 위임 (0) | 2006.01.17 |
메소드를 위한 상속성 키워드 (0) | 2006.01.16 |
연산자 오버로딩 (0) | 2006.01.16 |
[펌] 4_16 생성자를 호출하는 this() (0) | 2006.01.16 |
댓글