Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês
Esta documentação foi arquivada e não está sendo atualizada.

Método CollectionBase.GetEnumerator

Retorna um enumerador que percorre o CollectionBase instância.

Namespace:  System.Collections
Assembly:  mscorlib (em mscorlib.dll)

public IEnumerator GetEnumerator()

Valor de retorno

Tipo: System.Collections.IEnumerator
An IEnumerator para o CollectionBase instância.

Implementações

IEnumerable.GetEnumerator()

vb#c#

The foreach demonstrativo da (linguagem) translation from VPE for Csharpfor each no Visual Basic) oculta a complexidade dos enumeradores. Portanto, usar foreach é recomendado, em vez de manipular diretamente o enumerador.

Os enumeradores podem ser usados para ler os dados na coleção, mas não podem ser usadas para modificar a coleção subjacente.

Inicialmente, o enumerador está posicionado antes do primeiro elemento na coleção. Reset também oferece o enumerador de volta para esta posição. Nesta posição chamada Current lança uma exceção. Portanto, você deve telefonar MoveNext para avançar o enumerador para o primeiro elemento da coleção antes de ler o valor de Current.

Current Retorna o mesmo objeto até um MoveNext ou Reset é chamado. MoveNext Define Current para o próximo elemento.

If MoveNext passa o participante da coleção, o enumerador está posicionado após o último elemento na coleção e MoveNext Retorna false. Quando o enumerador está nesta posição, as chamadas subseqüentes a MoveNext também retornará false. Se a última telefonar para MoveNext retornado false, chamando Current lança uma exceção. Para conjunto Current para o primeiro elemento da coleção novamente, você pode chamar Reset seguido por MoveNext.

Um enumerador permanece válido, desde que a coleção permaneça inalterada.Se forem feitas alterações da coleção, sistema autônomo adicionar, modificar, ou excluindo elementos, o enumerador é invalidado irrecoverably e o próximo telefonar para MoveNext ou Reset lança um InvalidOperationException. Se a coleção for modificada entre MoveNext e Current, Current Retorna o elemento que ele está definido, mesmo que o enumerador já é invalidado.

O enumerador não tem acesso exclusivo à coleção; portanto, enumerando através de um conjunto não é intrinsecamente um procedimento com segurança de segmento.Mesmo quando uma coleção é sincronizada, outros Threads poderá ainda modificar a coleção, que faz com que o enumerador para gerar uma exceção.Para garantir segurança de segmentos durante enumeração, você pode bloquear a coleção durante a enumeração inteira ou pegar as exceções resultantes de alterações feitas por outros segmentos.

Embora o GetEnumerator método não estará visível para os clientes COM por padrão, herdando o CollectionBase classe pode expô-lo e pode causar comportamento indesejável em clientes COM.

Esse método é uma operação O(1).

O exemplo de código a seguir implementa a CollectionBase classe e usa essa implementação para criar uma coleção de Int16 objetos.

using System;
using System.Collections;

publicclass Int16Collection : CollectionBase  {

   public Int16 this[ int index ]  {
      get  {
         return( (Int16) List[index] );
      }
      set  {
         List[index] = value;
      }
   }

   publicint Add( Int16 value )  {
      return( List.Add( value ) );
   }

   publicint IndexOf( Int16 value )  {
      return( List.IndexOf( value ) );
   }

   publicvoid Insert( int index, Int16 value )  {
      List.Insert( index, value );
   }

   publicvoid Remove( Int16 value )  {
      List.Remove( value );
   }

   publicbool Contains( Int16 value )  {
      // If value is not of type Int16, this will return false.return( List.Contains( value ) );
   }

   protectedoverridevoid OnInsert( int index, Object value )  {
      // Insert additional code to be run only when inserting values.
   }

   protectedoverridevoid OnRemove( int index, Object value )  {
      // Insert additional code to be run only when removing values.
   }

   protectedoverridevoid OnSet( int index, Object oldValue, Object newValue )  {
      // Insert additional code to be run only when setting values.
   }

   protectedoverridevoid OnValidate( Object value )  {
      if ( value.GetType() != typeof(System.Int16) )
         thrownew ArgumentException( "value must be of type Int16.", "value" );
   }

}


publicclass SamplesCollectionBase  {

   publicstaticvoid Main()  {

      // Create and initialize a new CollectionBase.
      Int16Collection myI16 = new Int16Collection();

      // Add elements to the collection.
      myI16.Add( (Int16) 1 );
      myI16.Add( (Int16) 2 );
      myI16.Add( (Int16) 3 );
      myI16.Add( (Int16) 5 );
      myI16.Add( (Int16) 7 );

      // Display the contents of the collection using foreach. This is the preferred method.
      Console.WriteLine( "Contents of the collection (using foreach):" );
      PrintValues1( myI16 );

      // Display the contents of the collection using the enumerator.
      Console.WriteLine( "Contents of the collection (using enumerator):" );
      PrintValues2( myI16 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Initial contents of the collection (using Count and Item):" );
      PrintIndexAndValues( myI16 );

      // Search the collection with Contains and IndexOf.
      Console.WriteLine( "Contains 3: {0}", myI16.Contains( 3 ) );
      Console.WriteLine( "2 is at index {0}.", myI16.IndexOf( 2 ) );
      Console.WriteLine();

      // Insert an element into the collection at index 3.
      myI16.Insert( 3, (Int16) 13 );
      Console.WriteLine( "Contents of the collection after inserting at index 3:" );
      PrintIndexAndValues( myI16 );

      // Get and set an element using the index.
      myI16[4] = 123;
      Console.WriteLine( "Contents of the collection after setting the element at index 4 to 123:" );
      PrintIndexAndValues( myI16 );

      // Remove an element from the collection.
      myI16.Remove( (Int16) 2 );

      // Display the contents of the collection using the Count property and the Item property.
      Console.WriteLine( "Contents of the collection after removing the element 2:" );
      PrintIndexAndValues( myI16 );

   }

   // Uses the Count property and the Item property.publicstaticvoid PrintIndexAndValues( Int16Collection myCol )  {
      for ( int i = 0; i < myCol.Count; i++ )
         Console.WriteLine( "   [{0}]:   {1}", i, myCol[i] );
      Console.WriteLine();
   }

   // Uses the foreach statement which hides the complexity of the enumerator.// NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.publicstaticvoid PrintValues1( Int16Collection myCol )  {
      foreach ( Int16 i16 in myCol )
         Console.WriteLine( "   {0}", i16 );
      Console.WriteLine();
   }

   // Uses the enumerator. // NOTE: The foreach statement is the preferred way of enumerating the contents of a collection.publicstaticvoid PrintValues2( Int16Collection myCol )  {
      System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
      while ( myEnumerator.MoveNext() )
         Console.WriteLine( "   {0}", myEnumerator.Current );
      Console.WriteLine();
   }
}


/* 
This code produces the following output.

Contents of the collection (using foreach):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/
import System.* ;
import System.Collections.*;
import System.Collections.CollectionBase.*;

public class Int16Collection extends CollectionBase
{
    /** @property 
     */
    public short get_Value(int index)
    {
        short s = System.Convert.ToInt16(get_List().get_Item(index));
        return(s) ; 
    } //get_Value

    /** @property 
     */
    public void set_Value(int index,short value)
    {
        get_List().set_Item(index, (Int16)value);
    } //set_Value

    public int Add(short value) 
    {
        return get_List().Add((Int16)value);
    } //Add

    public int IndexOf(short value)
    {
        return get_List().IndexOf((Int16)value);
    } //IndexOf

    public void Insert(int index, short value) 
    {
        get_List().Insert(index, (Int16)value);
    } //Insert

    public void Remove(short value) 
    {
        get_List().Remove((Int16)value);
    } //Remove

    public boolean Contains(short value) 
    {
        // If value is not of type Int16, this will return false.
        return get_List().Contains((Int16)value);
    } //Contains

    protected   void OnInsert(int index, Object value) 
    {
        // Insert additional code to be run only when inserting values.
    } //OnInsert

       protected   void OnRemove(int index, Object value) 
    {
        // Insert additional code to be run only when removing values.
    } //OnRemove

       protected   void OnSet(int index, Object oldValue, Object newValue) 
    {
        // Insert additional code to be run only when setting values.
    } //OnSet

    protected   void OnValidate(Object value) 
    {
        if ( value.GetType() != Type.GetType("System.Int16")  ) {
            throw new ArgumentException("value must be of type Int16.", 
                "value");
        }
    } //OnValidate
} //Int16Collection

public class SamplesCollectionBase
{
    public static void main(String[] args)
    {
        // Create and initialize a new CollectionBase.
        Int16Collection myI16 =  new Int16Collection();

        // Add elements to the collection.
        myI16.Add((Int16)1);
        myI16.Add((Int16)2);
        myI16.Add((Int16)3);
        myI16.Add((Int16)5);
        myI16.Add((Int16)7);

        // Display the contents of the collection using for.
        Console.WriteLine("Contents of the collection (using for):");
        PrintValues1(myI16);

        // Display the contents of the collection using the enumerator.
        Console.WriteLine("Contents of the collection (using enumerator):");
        PrintValues2(myI16);

        // Display the contents of the collection using the Count property and 
        // the Item property.
        Console.WriteLine("Initial contents of the collection "
            + "(using Count and Item):");
        PrintIndexAndValues(myI16);

        // Search the collection with Contains and IndexOf.
        Console.WriteLine("Contains 3: {0}", 
            (System.Boolean)myI16.Contains((Int16)3));
        Console.WriteLine("2 is at index {0}.", 
            (Int16)myI16.IndexOf((Int16)2));
        Console.WriteLine();

        // Insert an element into the collection at index 3.
        myI16.Insert(3, (Int16)13);
        Console.WriteLine("Contents of the collection after inserting at"
            + " index 3:");
        PrintIndexAndValues(myI16);

        // Get and set an element using the index.
        myI16 .set_Item( 4 ,(Int16)123 );
        Console.WriteLine("Contents of the collection after setting the"
            + " element at index 4 to 123:");
        PrintIndexAndValues(myI16);

        // Remove an element from the collection.
        myI16.Remove((Int16)2);

        // Display the contents of the collection using the Count property and
        // the Item property.
        Console.WriteLine("Contents of the collection after removing the"
            + " element 2:");
        PrintIndexAndValues(myI16);
   } //main

   // Uses the Count property and the Item property.
    public static void PrintIndexAndValues(Int16Collection myCol) 
    {
        for(int i = 0; i < myCol.get_Count(); i++) {
            Console.WriteLine("   [{0}]:   {1}", (Int32)i, 
                myCol.get_Item(i));
        } 
        Console.WriteLine();
    } //PrintIndexAndValues

    // Uses the for statement which hides the complexity of the enumerator.
    // NOTE: The for statement is the preferred way of enumerating the contents 
    // of a collection.
    public static void PrintValues1(Int16Collection myCol) 
    {
        for (int iCtr = 0; iCtr < myCol.get_Count(); iCtr++) {
            Console.WriteLine("   {0}", myCol.get_Item(iCtr));
        }
        Console.WriteLine();
    } //PrintValues1

    // Uses the enumerator. 
    // NOTE: The for statement is the preferred way of enumerating the contents 
    // of a collection.
    public static void PrintValues2(Int16Collection myCol) 
    {
        System.Collections.IEnumerator myEnumerator = myCol.GetEnumerator();
        while(myEnumerator.MoveNext()) {
            Console.WriteLine("   {0}", myEnumerator.get_Current());
        }
        Console.WriteLine();
    } //PrintValues2
} //SamplesCollectionBase

/* 
Contents of the collection (using for):
   1
   2
   3
   5
   7

Contents of the collection (using enumerator):
   1
   2
   3
   5
   7

Initial contents of the collection (using Count and Item):
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   5
   [4]:   7

Contains 3: True
2 is at index 1.

Contents of the collection after inserting at index 3:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   5
   [5]:   7

Contents of the collection after setting the element at index 4 to 123:
   [0]:   1
   [1]:   2
   [2]:   3
   [3]:   13
   [4]:   123
   [5]:   7

Contents of the collection after removing the element 2:
   [0]:   1
   [1]:   3
   [2]:   13
   [3]:   123
   [4]:   7

*/



Windows Vista, Windows XP SP2, Windows XP Media Center Edition, Windows XP Professional x64 Edition, Windows XP Starter Edition, Windows Server 2003, Windows Server 2000 SP4, Windows Millennium Edition, Windows 98, Windows CE, Windows Mobile for Smartphone, Windows Mobile for Pocket PC, Xbox 360

o.NET Framework e.NET Compact Framework não oferecem suporte a todas as versões de cada plataforma. Para obter uma lista de versões suportadas, consulte Requisitos de sistema do .NET framework.

.NET Framework

Compatível com: 3.5, 3.0, 2.0, 1.1, 1.0

.NET Compact Framework

Compatível com: 3.5, 2.0, 1.0

XNA Framework

Compatível com: , 1.0
Mostrar: