Array.GetEnumerator Metódus
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egy értéket ad IEnumerator vissza a 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
Válaszok
An IEnumerator for the Array.
Megvalósítás
Példák
Az alábbi példakód bemutatja, hogyan listázhatja GetEnumerator a tömb elemeit.
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
Megjegyzések
A C# nyelv foreach utasítása (For Each az Visual Basic) elrejti az enumerátorok összetettségét. Ezért az enumerátor közvetlen módosítása helyett ajánlott a használat foreach .
Az enumerátorok a gyűjtemény adatainak olvasására használhatók, de nem használhatók az alapul szolgáló gyűjtemény módosítására.
Kezdetben az enumerátor a gyűjtemény első eleme elé kerül. Reset visszahozza az enumerátort ebbe a pozícióba. Ebben a pozícióban Current nincs meghatározva. Ezért a gyűjtemény értékének olvasása előtt meg kell hívnia MoveNext , hogy az enumerátort a gyűjtemény első elemére irányozza Currentelő.
Current ugyanazt az objektumot adja vissza, amíg meg MoveNext nem hívja vagy Reset meghívja. MoveNext elemet a következő elemre állítja Current .
Ha MoveNext a gyűjtemény végére ér, az enumerátor a gyűjtemény utolsó eleme után lesz elhelyezve, és MoveNext visszaadja a függvényt false. Ha az enumerátor ebben a pozícióban van, a következő hívások is visszatérnek MoveNextfalse. Ha az utolsó visszaküldött MoveNextfalse hívás Current nincs meghatározva. Ha ismét a gyűjtemény első elemére szeretne állítani Current , meghívhatja Reset a következőt MoveNext: .
Az enumerátorok mindaddig érvényesek maradnak, amíg a gyűjtemény nem változik. Ha módosításokat végez a gyűjteményen, például elemeket ad hozzá, módosít vagy töröl, az enumerátor visszavonhatatlanul érvénytelen lesz, és a viselkedése nincs meghatározva.
Az enumerátor nem rendelkezik kizárólagos hozzáféréssel a gyűjteményhez; ezért a gyűjteményen keresztüli számbavétel alapvetően nem szálbiztos eljárás. Az enumerálás során a szálbiztonság érdekében zárolhatja a gyűjteményt a teljes enumerálás során. Ahhoz, hogy a gyűjtemény több szálon keresztül is elérhető legyen olvasáshoz és íráshoz, saját szinkronizálást kell implementálnia.
Ez a módszer egy O(1) művelet.