Nyelv

ArrayList.GetEnumerator Metódus

Definíció

Egy enumerátort ad vissza, amely a ArrayList.

Túlterhelések

Name Description
GetEnumerator()

A teljes ArrayListenumerátort adja eredményül.

GetEnumerator(Int32, Int32)

Enumerátort ad vissza a ArrayList.

GetEnumerator()

Forrás:
ArrayList.cs
Forrás:
ArrayList.cs
Forrás:
ArrayList.cs
Forrás:
ArrayList.cs
Forrás:
ArrayList.cs

A teljes ArrayListenumerátort adja eredményül.

public:
 virtual 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 Overridable Function GetEnumerator () As IEnumerator

Válaszok

An IEnumerator az egész ArrayList.

Megvalósítás

Példák

Az alábbi példa lekéri a számbavételt egy ArrayList, és az enumerátort egy sor elemhez a ArrayList.

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        ArrayList colors = new ArrayList();
        colors.Add("red");
        colors.Add("blue");
        colors.Add("green");
        colors.Add("yellow");
        colors.Add("beige");
        colors.Add("brown");
        colors.Add("magenta");
        colors.Add("purple");

        IEnumerator e = colors.GetEnumerator();
        while (e.MoveNext())
        {
            Object obj = e.Current;
            Console.WriteLine(obj);
        }

        Console.WriteLine();

        IEnumerator e2 = colors.GetEnumerator(2, 4);
        while (e2.MoveNext())
        {
            Object obj = e2.Current;
            Console.WriteLine(obj);
        }
    }
}

/* This code example produces
   the following ouput:
    red
    blue
    green
    yellow
    beige
    brown
    magenta
    purple

    green
    yellow
    beige
    brown
 */
Imports System.Collections

Class Program
    Private Shared Sub Main(ByVal args As String())
        Dim colors As New ArrayList()
        colors.Add("red")
        colors.Add("blue")
        colors.Add("green")
        colors.Add("yellow")
        colors.Add("beige")
        colors.Add("brown")
        colors.Add("magenta")
        colors.Add("purple")
        
        Dim e As IEnumerator = colors.GetEnumerator()
        While e.MoveNext()
            Dim obj As [Object] = e.Current
            Console.WriteLine(obj)
        End While
        
        Console.WriteLine()
        
        Dim e2 As IEnumerator = colors.GetEnumerator(2, 4)
        While e2.MoveNext()
            Dim obj As [Object] = e2.Current
            Console.WriteLine(obj)
        End While
    End Sub
End Class

' This code example produces
' the following ouput:
' red
' blue
' green
' yellow
' beige
' brown
' magenta
' purple
'
' green
' yellow
' beige
' brown
'

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 metódus egy O(1) művelet.

Lásd még

A következőre érvényes:

GetEnumerator(Int32, Int32)

Forrás:
ArrayList.cs
Forrás:
ArrayList.cs
Forrás:
ArrayList.cs
Forrás:
ArrayList.cs
Forrás:
ArrayList.cs

Enumerátort ad vissza a ArrayList.

public:
 virtual System::Collections::IEnumerator ^ GetEnumerator(int index, int count);
public virtual System.Collections.IEnumerator GetEnumerator(int index, int count);
abstract member GetEnumerator : int * int -> System.Collections.IEnumerator
override this.GetEnumerator : int * int -> System.Collections.IEnumerator
Public Overridable Function GetEnumerator (index As Integer, count As Integer) As IEnumerator

Paraméterek

index
Int32

Annak a szakasznak a ArrayList nullaalapú kezdőindexe, amelyre az enumerátornak hivatkoznia kell.

count
Int32

A szakasz azon ArrayList elemeinek száma, amelyekre az enumerátornak hivatkoznia kell.

Válaszok

Egy IEnumerator a megadott elemtartományhoz a ArrayList.

Kivételek

index kisebb, mint nulla.

-vagy-

count kisebb, mint nulla.

index és count ne adjon meg érvényes tartományt a ArrayList.

Példák

Az alábbi példa lekéri a számbavételt egy ArrayList, és az enumerátort egy sor elemhez a ArrayList.

using System;
using System.Collections;

class Program
{
    static void Main(string[] args)
    {
        ArrayList colors = new ArrayList();
        colors.Add("red");
        colors.Add("blue");
        colors.Add("green");
        colors.Add("yellow");
        colors.Add("beige");
        colors.Add("brown");
        colors.Add("magenta");
        colors.Add("purple");

        IEnumerator e = colors.GetEnumerator();
        while (e.MoveNext())
        {
            Object obj = e.Current;
            Console.WriteLine(obj);
        }

        Console.WriteLine();

        IEnumerator e2 = colors.GetEnumerator(2, 4);
        while (e2.MoveNext())
        {
            Object obj = e2.Current;
            Console.WriteLine(obj);
        }
    }
}

/* This code example produces
   the following ouput:
    red
    blue
    green
    yellow
    beige
    brown
    magenta
    purple

    green
    yellow
    beige
    brown
 */
Imports System.Collections

Class Program
    Private Shared Sub Main(ByVal args As String())
        Dim colors As New ArrayList()
        colors.Add("red")
        colors.Add("blue")
        colors.Add("green")
        colors.Add("yellow")
        colors.Add("beige")
        colors.Add("brown")
        colors.Add("magenta")
        colors.Add("purple")
        
        Dim e As IEnumerator = colors.GetEnumerator()
        While e.MoveNext()
            Dim obj As [Object] = e.Current
            Console.WriteLine(obj)
        End While
        
        Console.WriteLine()
        
        Dim e2 As IEnumerator = colors.GetEnumerator(2, 4)
        While e2.MoveNext()
            Dim obj As [Object] = e2.Current
            Console.WriteLine(obj)
        End While
    End Sub
End Class

' This code example produces
' the following ouput:
' red
' blue
' green
' yellow
' beige
' brown
' magenta
' purple
'
' green
' yellow
' beige
' brown
'

Megjegyzések

A foreach C#-nyelv utasítása 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 metódus egy O(1) művelet.

Lásd még

A következőre érvényes: