Array.GetEnumerator Metod
Definition
Viktigt
En del information gäller för förhandsversionen av en produkt och kan komma att ändras avsevärt innan produkten blir allmänt tillgänglig. Microsoft lämnar inga garantier, uttryckliga eller underförstådda, avseende informationen som visas här.
Returnerar ett IEnumerator för 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
Returer
En IEnumerator för Array.
Implementeringar
Exempel
Följande kodexempel visar hur du använder GetEnumerator för att lista elementen i en matris.
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
Kommentarer
foreach-instruktionen för C#-språket (For Each i Visual Basic) döljer uppräknarens komplexitet. Därför rekommenderas användning foreach i stället för att direkt manipulera uppräknaren.
Uppräknare kan användas för att läsa data i samlingen, men de kan inte användas för att ändra den underliggande samlingen.
Inledningsvis placeras uppräknaren före det första elementet i samlingen. Reset tar också uppräknaren tillbaka till den här positionen. I det här läget Current är det odefinierat. Därför måste du anropa MoveNext för att flytta uppräknaren till det första elementet i samlingen innan du läser värdet Currentför .
Current returnerar samma objekt tills antingen MoveNext eller Reset anropas. MoveNext anger Current till nästa element.
Om MoveNext skickar slutet av samlingen placeras uppräknaren efter det sista elementet i samlingen och MoveNext returnerar false. När uppräknaren befinner sig på den här positionen returnerar MoveNextefterföljande anrop false även . Om det sista anropet som MoveNext returnerades falseCurrentär odefinierat. Om du vill ange Current till det första elementet i samlingen igen kan du anropa Reset följt av MoveNext.
En uppräkning förblir giltig så länge samlingen förblir oförändrad. Om ändringar görs i samlingen, till exempel att lägga till, ändra eller ta bort element, är uppräknaren oåterkalleligen ogiltig och dess beteende är odefinierat.
Uppräknaren har inte exklusiv åtkomst till samlingen. Därför är uppräkning genom en samling i sig inte en trådsäker procedur. För att garantera trådsäkerheten under uppräkningen kan du låsa samlingen under hela uppräkningen. Om du vill att samlingen ska kunna nås av flera trådar för läsning och skrivning måste du implementera din egen synkronisering.
Den här metoden är en O(1)-åtgärd.