StringEnumerator Classe
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Dá suporte a uma iteração simples em um StringCollection.
public ref class StringEnumerator
public class StringEnumerator
type StringEnumerator = class
Public Class StringEnumerator
- Herança
-
StringEnumerator
Exemplos
O exemplo de código a seguir demonstra várias das propriedades e métodos de StringEnumerator.
using System;
using System.Collections.Specialized;
public class SamplesStringEnumerator {
public static void Main() {
// Creates and initializes a StringCollection.
StringCollection myCol = new StringCollection();
String[] myArr = new String[] { "red", "orange", "yellow", "green", "blue", "indigo", "violet" };
myCol.AddRange( myArr );
// Enumerates the elements in the StringCollection.
StringEnumerator myEnumerator = myCol.GetEnumerator();
while ( myEnumerator.MoveNext() )
Console.WriteLine( "{0}", myEnumerator.Current );
Console.WriteLine();
// Resets the enumerator and displays the first element again.
myEnumerator.Reset();
if ( myEnumerator.MoveNext() )
Console.WriteLine( "The first element is {0}.", myEnumerator.Current );
}
}
/*
This code produces the following output.
red
orange
yellow
green
blue
indigo
violet
The first element is red.
*/
Imports System.Collections.Specialized
Public Class SamplesStringEnumerator
Public Shared Sub Main()
' Creates and initializes a StringCollection.
Dim myCol As New StringCollection()
Dim myArr() As [String] = {"red", "orange", "yellow", "green", "blue", "indigo", "violet"}
myCol.AddRange(myArr)
' Enumerates the elements in the StringCollection.
Dim myEnumerator As StringEnumerator = myCol.GetEnumerator()
While myEnumerator.MoveNext()
Console.WriteLine("{0}", myEnumerator.Current)
End While
Console.WriteLine()
' Resets the enumerator and displays the first element again.
myEnumerator.Reset()
If myEnumerator.MoveNext() Then
Console.WriteLine("The first element is {0}.", myEnumerator.Current)
End If
End Sub
End Class
'This code produces the following output.
'
'red
'orange
'yellow
'green
'blue
'indigo
'violet
'
'The first element is red.
Comentários
A instrução foreach da linguagem C# (for each em Visual Basic) oculta a complexidade dos enumeradores. Portanto, o uso 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 usados para modificar a coleção subjacente.
Inicialmente, o enumerador é posicionado antes do primeiro elemento da coleção. Reset também traz o enumerador de volta para essa posição. Nessa posição, a chamada Current gera uma exceção. Portanto, você deve chamar 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é ou MoveNextReset é chamado. MoveNext define Current para o próximo elemento.
Se MoveNext passar o final da coleção, o enumerador será posicionado após o último elemento na coleção e MoveNext retornará false. Quando o enumerador está nessa posição, chamadas subsequentes para MoveNext também retornar false. Se a última chamada a ser MoveNext retornada false, a chamada Current gerará uma exceção. Para definir Current como o primeiro elemento da coleção novamente, você pode chamar Reset seguido por MoveNext.
Um enumerador permanece válido enquanto a coleção permanecer inalterada. Se forem feitas alterações na coleção, como adicionar, modificar ou excluir elementos, o enumerador será invalidado irrecuperavelmente e a próxima chamada para MoveNext ou Reset gerará um InvalidOperationException. Se a coleção for modificada entre MoveNext e Current, Current retornará o elemento ao qual ela está definida, mesmo que o enumerador já esteja invalidado.
O enumerador não tem acesso exclusivo à coleção; portanto, enumerar por meio de uma coleção não é intrinsecamente um procedimento thread-safe. Mesmo quando uma coleção é sincronizada, outros threads ainda podem modificar a coleção, o que faz com que o enumerador gere uma exceção. Para garantir a segurança do thread durante a enumeração, você pode bloquear a coleção durante toda a enumeração ou capturar as exceções resultantes de alterações feitas por outros threads.
Propriedades
| Nome | Description |
|---|---|
| Current |
Obtém o elemento atual da coleção. |
Métodos
| Nome | Description |
|---|---|
| Equals(Object) |
Determina se o objeto especificado é igual ao objeto atual. (Herdado de Object) |
| GetHashCode() |
Serve como a função hash predefinida. (Herdado de Object) |
| GetType() |
Obtém o Type da instância atual. (Herdado de Object) |
| MemberwiseClone() |
Cria uma cópia superficial do Objectatual. (Herdado de Object) |
| MoveNext() |
Avança o enumerador para o próximo elemento da coleção. |
| Reset() |
Define o enumerador como sua posição inicial, que é antes do primeiro elemento na coleção. |
| ToString() |
Retorna uma cadeia de caracteres que representa o objeto atual. (Herdado de Object) |
Aplica-se a
Acesso thread-safe
Membros estáticos públicos (Shared no Visual Basic) desse tipo são thread safe. Não há garantia de que quaisquer membros de instância sejam thread-safe.
Enumerar por meio de uma coleção não é intrinsecamente um procedimento thread-safe. Mesmo quando uma coleção é sincronizada, outros threads ainda podem modificar a coleção, o que faz com que o enumerador gere uma exceção. Para garantir a segurança do thread durante a enumeração, você pode bloquear a coleção durante toda a enumeração ou capturar as exceções resultantes de alterações feitas por outros threads.