다음을 통해 공유


방법: 사용자 정의 컬렉션 마다 반복

전용이 아닌 GetEnumerator 함수는 핸들을 반환 하는 열거자 클래스 또는 인터페이스에 필요한 클래스 관리 컬렉션 이어야 합니다.열거자 클래스는 비정적 MoveNext 함수 및 현재 속성에 대 한 선언을 포함 해야 합니다.

예제

간단한 사용자 참조 형식의 컬렉션을 정의합니다.

// for_each_user_defined_collections.cpp
// compile with: /clr
using namespace System;
public interface struct IMyEnumerator {
   bool MoveNext();
   property Object^ Current {
      Object^ get();
   }
   void Reset();
};

public ref struct MyArray {   
   
   MyArray( array<int>^ d ) {
      data = d;
   }

   ref struct enumerator : IMyEnumerator {
      enumerator( MyArray^ myArr ) {
         colInst = myArr;
         currentIndex = -1;
      }

      virtual bool MoveNext() {
         if( currentIndex < colInst->data->Length - 1 ) {
            currentIndex++;
            return true;
         }
         return false;
      }
   
      property Object^ Current {
         virtual Object^ get() {
            return colInst->data[currentIndex];
         }
      };
      
      virtual void Reset() {}
      ~enumerator() {}
         
      MyArray^ colInst;
      int currentIndex;
   };
   
   array<int>^ data;

   IMyEnumerator^ GetEnumerator() {
      return gcnew enumerator(this);
   }
};

int main() {
   int retval = 0;

   MyArray^ col = gcnew MyArray( gcnew array<int>{10, 20, 30 } );
   
   for each ( Object^ c in col )
      retval += (int)c;

   retval -= 10 + 20 + 30;
   
   for each ( int c in gcnew MyArray( gcnew array<int>{10, 20, 30 } ) )
      retval += c;

   retval -= 10 + 20 + 30;
   
   Console::WriteLine("Return Code: {0}", retval );
   return retval;
}
  

참고 항목

참조

각에 대해의