Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 전체 ArrayList의 열거자(Enumerator)를 얻는 방법

C#에서 ArrayList의 전체 요소를 순회하려면 GetEnumerator() 메서드를 사용하여 열거자(Enumerator)를 얻을 수 있습니다. 이 메서드는 IEnumerator 인터페이스 객체를 반환하며, 이를 통해 컬렉션의 모든 요소에 순차적으로 접근할 수 있습니다.

열거자의 기본 동작 원리

IEnumerator 인터페이스는 다음 두 멤버를 중심으로 동작합니다.

  • MoveNext(): 커서를 다음 요소로 이동시킵니다. 다음 요소가 존재하면 true, 더 이상 없으면 false를 반환합니다.
  • Current: 현재 커서가 가리키는 요소를 반환합니다.

참고로 열거자는 읽기 전용이며 앞으로만 이동할 수 있습니다. 또한 열거 도중 컬렉션이 수정되면 InvalidOperationException이 발생할 수 있으므로 주의해야 합니다.

예제 1: 문자열 ArrayList 순회하기

using System;
using System.Collections;

public class Demo {
   public static void Main(String[] args) {
      ArrayList list1 = new ArrayList();
      list1.Add("A");
      list1.Add("B");
      list1.Add("C");
      list1.Add("D");
      list1.Add("E");
      list1.Add("F");
      list1.Add("G");
      list1.Add("H");
      list1.Add("I");

      Console.WriteLine("ArrayList1의 요소...");
      foreach (string res in list1) {
         Console.WriteLine(res);
      }

      ArrayList list2 = new ArrayList();
      list2.Add("A");
      list2.Add("B");
      list2.Add("C");
      list2.Add("D");
      list2.Add("E");
      list2.Add("F");
      list2.Add("G");
      list2.Add("H");
      list2.Add("I");

      Console.WriteLine("ArrayList2의 요소...");
      foreach (string res in list2) {
         Console.WriteLine(res);
      }

      Console.WriteLine("ArrayList2의 요소 개수 = " + list2.Count);
      list2.RemoveAt(5);
      Console.WriteLine("ArrayList2의 요소 개수 (삭제 후) = " + list2.Count);

      Console.WriteLine("열거자로 ArrayList2 순회하기...");
      IEnumerator demoEnum = list2.GetEnumerator();
      while (demoEnum.MoveNext()) {
         Console.WriteLine(demoEnum.Current);
      }
   }
}

출력 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

ArrayList1의 요소...
A
B
C
D
E
F
G
H
I
ArrayList2의 요소...
A
B
C
D
E
F
G
H
I
ArrayList2의 요소 개수 = 9
ArrayList2의 요소 개수 (삭제 후) = 8
열거자로 ArrayList2 순회하기...
A
B
C
D
E
G
H
I

위 예제에서 RemoveAt(5)를 호출하여 인덱스 5에 있는 요소 "F"가 삭제된 것을 확인할 수 있습니다. 따라서 열거자가 출력하는 목록에는 "F"가 포함되지 않습니다.

예제 2: 정수 ArrayList 순회하기

이번에는 정수형 데이터를 담은 ArrayList를 열거자로 순회해 보겠습니다.

using System;
using System.Collections;

public class Demo {
   public static void Main() {
      ArrayList arrList = new ArrayList();
      arrList.Add(100);
      arrList.Add(200);
      arrList.Add(300);
      arrList.Add(400);
      arrList.Add(500);

      Console.WriteLine("열거자로 ArrayList 순회하기...");
      IEnumerator demoEnum = arrList.GetEnumerator();
      while (demoEnum.MoveNext()) {
         Console.WriteLine(demoEnum.Current);
      }
   }
}

출력 결과

실행 결과는 다음과 같습니다.

열거자로 ArrayList 순회하기...
100
200
300
400
500

정리

ArrayList의 전체 열거자를 얻으려면 GetEnumerator() 메서드를 호출하고, 반환된 IEnumerator 객체의 MoveNext()Current를 조합하여 while 루프로 요소를 하나씩 처리하면 됩니다. 이 방식은 foreach 문과 유사한 결과를 제공하지만, 열거 과정을 직접 제어해야 하는 상황에서 유용하게 활용할 수 있습니다.