Array.GetEnumerator Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
IEnumerator Vrátí hodnotu pro Array.
public:
virtual System::Collections::IEnumerator ^ GetEnumerator();
public System.Collections.IEnumerator GetEnumerator ();
public virtual System.Collections.IEnumerator GetEnumerator ();
abstract member GetEnumerator : unit -> System.Collections.IEnumerator
override this.GetEnumerator : unit -> System.Collections.IEnumerator
Public Function GetEnumerator () As IEnumerator
Public Overridable Function GetEnumerator () As IEnumerator
Návraty
A IEnumerator for the Array.
Implementuje
Příklady
Následující příklad kódu ukazuje, jak použít GetEnumerator k výpisu prvků pole.
using namespace System;
int main()
{
// Creates and initializes a new Array.
array<String^>^myArr = gcnew array<String^>(10);
myArr[ 0 ] = "The";
myArr[ 1 ] = "quick";
myArr[ 2 ] = "brown";
myArr[ 3 ] = "fox";
myArr[ 4 ] = "jumps";
myArr[ 5 ] = "over";
myArr[ 6 ] = "the";
myArr[ 7 ] = "lazy";
myArr[ 8 ] = "dog";
// Displays the values of the Array.
int i = 0;
System::Collections::IEnumerator^ myEnumerator = myArr->GetEnumerator();
Console::WriteLine( "The Array contains the following values:" );
while ( (myEnumerator->MoveNext()) && (myEnumerator->Current != nullptr) )
Console::WriteLine( "[{0}] {1}", i++, myEnumerator->Current );
}
/*
This code produces the following output.
The Array contains the following values:
[0] The
[1] quick
[2] brown
[3] fox
[4] jumps
[5] over
[6] the
[7] lazy
[8] dog
*/
using System;
public class SamplesArray {
public static void Main() {
// Creates and initializes a new Array.
String[] myArr = new String[10];
myArr[0] = "The";
myArr[1] = "quick";
myArr[2] = "brown";
myArr[3] = "fox";
myArr[4] = "jumps";
myArr[5] = "over";
myArr[6] = "the";
myArr[7] = "lazy";
myArr[8] = "dog";
// Displays the values of the Array.
int i = 0;
System.Collections.IEnumerator myEnumerator = myArr.GetEnumerator();
Console.WriteLine( "The Array contains the following values:" );
while (( myEnumerator.MoveNext() ) && ( myEnumerator.Current != null ))
Console.WriteLine( "[{0}] {1}", i++, myEnumerator.Current );
}
}
/*
This code produces the following output.
The Array contains the following values:
[0] The
[1] quick
[2] brown
[3] fox
[4] jumps
[5] over
[6] the
[7] lazy
[8] dog
*/
// Creates and initializes a new Array.
let myArr = Array.zeroCreate 10
myArr[0..8] <-
[| "The"
"quick"
"brown"
"fox"
"jumps"
"over"
"the"
"lazy"
"dog" |]
// Displays the values of the Array.
let mutable i = 0
let myEnumerator = myArr.GetEnumerator()
printfn "The Array contains the following values:"
while myEnumerator.MoveNext() && myEnumerator.Current <> null do
printfn $"[{i}] {myEnumerator.Current}"
i <- i + 1
// This code produces the following output.
// The Array contains the following values:
// [0] The
// [1] quick
// [2] brown
// [3] fox
// [4] jumps
// [5] over
// [6] the
// [7] lazy
// [8] dog
Public Class SamplesArray
Public Shared Sub Main()
' Creates and initializes a new Array.
Dim myArr(10) As [String]
myArr(0) = "The"
myArr(1) = "quick"
myArr(2) = "brown"
myArr(3) = "fox"
myArr(4) = "jumps"
myArr(5) = "over"
myArr(6) = "the"
myArr(7) = "lazy"
myArr(8) = "dog"
' Displays the values of the Array.
Dim i As Integer = 0
Dim myEnumerator As System.Collections.IEnumerator = myArr.GetEnumerator()
Console.WriteLine("The Array contains the following values:")
While myEnumerator.MoveNext() And Not (myEnumerator.Current Is Nothing)
Console.WriteLine("[{0}] {1}", i, myEnumerator.Current)
i += 1
End While
End Sub
End Class
'This code produces the following output.
'
'The Array contains the following values:
'[0] The
'[1] quick
'[2] brown
'[3] fox
'[4] jumps
'[5] over
'[6] the
'[7] lazy
'[8] dog
Poznámky
Příkaz foreach
jazyka C# (for each
v jazyce C++, For Each
v Visual Basic) skryje složitost výčtů. Proto se doporučuje použít foreach
místo přímé manipulace s výčtem.
Enumerátory lze používat ke čtení dat v kolekci, nikoli však k úpravě zdrojové kolekce.
Enumerátor je zpočátku umístěn před prvním prvkem v kolekci. Reset také vrátí enumerátor zpět na tuto pozici. V této pozici Current není definován. Proto je nutné předčíst MoveNext výčet na první prvek kolekce před přečtením hodnoty .Current
Current vrátí stejný objekt, dokud není volána MoveNext nebo Reset není volána. MoveNext nastaví Current na další prvek.
Pokud MoveNext předá konec kolekce, enumerátor se umístí za poslední prvek v kolekci a MoveNext vrátí false
. Pokud je výčet na této pozici, následné volání, která se MoveNext mají vrátit false
také . Pokud se vrátí poslední volání MoveNext false
, Current není definováno. Chcete-li nastavit Current na první prvek kolekce znovu, můžete volat Reset následovaný MoveNext.
Enumerátor zůstane platný, dokud kolekce zůstane beze změny. Pokud jsou v kolekci provedeny změny, jako je přidání, úprava nebo odstranění prvků, enumerátor je nevratně neplatný a jeho chování není definováno.
Enumerátor nemá výhradní přístup k kolekci; výčet kolekce tedy není vnitřně bezpečným postupem vlákna. Pokud chcete zajistit bezpečnost vláken během výčtu, můžete kolekci uzamknout během celého výčtu. Chcete-li více vláknům umožnit přístup ke kolekci pro čtení a zápis, musíte implementovat svou vlastní synchronizaci.
Tato metoda je operace O(1).