Array.GetEnumerator Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Retourne IEnumerator pour l'objet 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
Retours
IEnumerator pour Array.
Implémente
Exemples
L’exemple de code suivant montre comment utiliser GetEnumerator pour répertorier les éléments d’un tableau.
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
Remarques
L’instruction foreach
du langage C# (for each
en C++, For Each
en Visual Basic) masque la complexité des énumérateurs. Il est donc recommandé d'utiliser foreach
plutôt que de manipuler l'énumérateur directement.
Les énumérateurs peuvent être utilisés pour lire les données de la collection, mais ils ne permettent pas de modifier la collection sous-jacente.
Au départ, l'énumérateur est positionné avant le premier élément de la collection. Reset replace également l'énumérateur à cette position. À cette position, Current n'est pas défini. Par conséquent, vous devez appeler MoveNext pour avancer l'énumérateur jusqu'au premier élément de la collection avant de lire la valeur de Current.
Current retourne le même objet tant que MoveNext ou Reset n'est pas appelé. MoveNext affecte l'élément suivant à Current.
Si MoveNext passe la fin de la collection, l’énumérateur est positionné après le dernier élément de la collection et MoveNext retourne false
. Lorsque l’énumérateur se trouve à cette position, les appels suivants retournent MoveNextfalse
également . Si le dernier appel à MoveNext retourné false
, Current n’est pas défini. Pour attribuer une nouvelle fois Current au premier élément de la collection, vous pouvez appeler Reset suivi de MoveNext.
Un énumérateur reste valide aussi longtemps que la collection demeure inchangée. Si des modifications sont apportées à la collection, telles que l’ajout, la modification ou la suppression d’éléments, l’énumérateur est définitivement invalidé et son comportement n’est pas défini.
L'énumérateur ne dispose pas d'un accès exclusif à la collection. Par conséquent, l'énumération d'une collection n'est pas intrinsèquement une procédure thread-safe. Pour garantir la sécurité des threads pendant l'énumération, vous pouvez verrouiller la collection tout au long de cette opération. Pour permettre à plusieurs threads d’accéder en lecture et en écriture à la collection, vous devez implémenter votre propre synchronisation.
Cette méthode est une opération O(1).