StringEnumerator Klasa

Definicja

Obsługuje prostą iterację za pośrednictwem elementu StringCollection.

public ref class StringEnumerator
public class StringEnumerator
type StringEnumerator = class
Public Class StringEnumerator
Dziedziczenie
StringEnumerator

Przykłady

Poniższy przykład kodu przedstawia kilka właściwości i metod .StringEnumerator

#using <System.dll>

using namespace System;
using namespace System::Collections::Specialized;
int main()
{
   
   // Creates and initializes a StringCollection.
   StringCollection^ myCol = gcnew StringCollection;
   array<String^>^myArr = {"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.

*/
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.

Uwagi

Instrukcja foreach języka C# (for each w Visual Basic) ukrywa złożoność modułów wyliczania. Dlatego użycie foreach jest zalecane zamiast bezpośredniego manipulowania modułem wyliczającym.

Moduły wyliczające mogą służyć do odczytu danych w kolekcji, ale nie można za ich pomocą modyfikować kolekcji źródłowej.

Początkowo moduł wyliczający jest umieszczony przed pierwszym elementem w kolekcji. Reset powoduje również powrót modułu wyliczającego do tej pozycji. W tej pozycji wywołanie Current zgłasza wyjątek. W związku z tym należy wywołać metodę MoveNext , aby przejść do pierwszego elementu kolekcji przed odczytaniem wartości Current.

Current Metoda zwraca ten sam obiekt do momentu wywołania metody MoveNext lub Reset . MoveNext ustawia Current element na następny.

Jeśli MoveNext przejdzie koniec kolekcji, moduł wyliczający zostanie umieszczony po ostatnim elemecie w kolekcji i MoveNext zwróci wartość false. Gdy moduł wyliczający znajduje się na tym stanowisku, kolejne wywołania , aby MoveNext również zwrócić falsewartość . Jeśli ostatnie wywołanie zwracane MoveNextfalse, wywołanie Current metody zgłasza wyjątek. Aby ponownie ustawić Current element na pierwszy element kolekcji, możesz wywołać Reset metodę , a następnie .MoveNext

Moduł wyliczający zachowuje ważność tak długo, jak długo kolekcja pozostaje niezmieniona. W przypadku wprowadzania zmian w kolekcji, takich jak dodawanie, modyfikowanie lub usuwanie elementów, moduł wyliczający jest nieodwracalnie unieważniany, a następne wywołanie MoveNext metody lub Reset zgłasza InvalidOperationExceptionbłąd . Jeśli kolekcja jest modyfikowana między elementami MoveNext i Current, Current zwraca element ustawiony na , nawet jeśli moduł wyliczający jest już unieważniony.

Moduł wyliczający nie ma wyłącznego dostępu do kolekcji, w związku z tym wyliczanie w kolekcji nie jest wewnętrznie procedurą odporną na wielowątkowość. Nawet gdy kolekcja jest synchronizowana, inne wątki nadal mogą ją modyfikować. Powoduje to zgłaszanie wyjątku przez moduł wyliczający. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, można zablokować kolekcję podczas całego procesu wyliczania albo rejestrować wyjątki wynikłe ze zmian wprowadzanych przez inne wątków.

Właściwości

Current

Pobiera bieżący element w kolekcji.

Metody

Equals(Object)

Określa, czy dany obiekt jest taki sam, jak bieżący obiekt.

(Odziedziczone po Object)
GetHashCode()

Służy jako domyślna funkcja skrótu.

(Odziedziczone po Object)
GetType()

Type Pobiera wartość bieżącego wystąpienia.

(Odziedziczone po Object)
MemberwiseClone()

Tworzy płytkią kopię bieżącego Objectelementu .

(Odziedziczone po Object)
MoveNext()

Rozwija moduł wyliczający do następnego elementu kolekcji.

Reset()

Ustawia moduł wyliczający na jego pozycję początkową, która jest przed pierwszym elementem w kolekcji.

ToString()

Zwraca ciąg reprezentujący bieżący obiekt.

(Odziedziczone po Object)

Dotyczy

Bezpieczeństwo wątkowe

Publiczne statyczne (Shared w Visual Basic) elementy członkowskie tego typu są bezpieczne wątkami. Wystąpienia elementów członkowskich nie dają gwarancji bezpieczeństwa wątków.

Wyliczanie w kolekcji nie jest wewnętrznie procedurą odporną na wielowątkowość. Nawet gdy kolekcja jest synchronizowana, inne wątki nadal mogą ją modyfikować. Powoduje to zgłaszanie wyjątku przez moduł wyliczający. Aby zagwarantować bezpieczeństwo wątków podczas wyliczania, można zablokować kolekcję podczas całego procesu wyliczania albo rejestrować wyjątki wynikłe ze zmian wprowadzanych przez inne wątków.

Zobacz też