Cómo: Recorra Compilaciones una colección definido por el usuario y para cada

Para que una clase es una colección administrada, necesita una función de GetEnumerator de un que devuelve un identificador a una clase de enumerador o interfaz.Una clase de enumerador debe contener la declaración de la función y la propiedad Current no estáticas MoveNext.

Ejemplo

Colección definido por el usuario sencillo con los tipos de referencia.

// 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;
}
  

Vea también

Referencia

para cada, en