ArrayList.GetEnumerator メソッド

定義

ArrayListを反復処理する列挙子を返します。

オーバーロード

名前 説明
GetEnumerator()

ArrayList全体の列挙子を返します。

GetEnumerator(Int32, Int32)

ArrayList内の要素の範囲の列挙子を返します。

GetEnumerator()

ArrayList全体の列挙子を返します。

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

返品

ArrayList全体のIEnumerator

実装

次の例では、 ArrayListの列挙子と、 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
'

注釈

C# 言語の foreach ステートメント (Visual Basic の for each) は、列挙子の複雑さを隠します。 したがって、列挙子を直接操作するのではなく、 foreach を使用することをお勧めします。

列挙子を使用してコレクション内のデータを読み取ることができますが、基になるコレクションを変更するために使用することはできません。

最初は、列挙子はコレクション内の最初の要素の前に配置されます。 Reset また、列挙子をこの位置に戻します。 この位置では、 Current は未定義です。 したがって、MoveNextの値を読み取る前に、Currentを呼び出して列挙子をコレクションの最初の要素に進める必要があります。

Current は、 MoveNext または Reset が呼び出されるまで、同じオブジェクトを返します。 MoveNext は、 Current を次の要素に設定します。

MoveNextコレクションの末尾を渡すと、列挙子はコレクション内の最後の要素の後に配置され、MoveNextfalseを返します。 列挙子がこの位置にある場合、後続の MoveNext の呼び出しでも falseが返されます。 MoveNext false最後の呼び出しが返された場合、Currentは未定義です。 Currentをコレクションの最初の要素に再度設定するには、Resetを呼び出し、その後にMoveNextを呼び出します。

列挙子は、コレクションが変更されない限り有効なままです。 要素の追加、変更、削除など、コレクションに変更が加えられた場合、列挙子は回復不能に無効になり、その動作は未定義になります。

列挙子は、コレクションへの排他的アクセス権を持っていません。したがって、コレクションを通じた列挙は、本質的にスレッド セーフなプロシージャではありません。 列挙中のスレッド セーフを保証するために、列挙体全体の間にコレクションをロックできます。 読み取りと書き込みのためにコレクションに複数のスレッドからアクセスできるようにするには、独自の同期を実装する必要があります。

このメソッドは O(1) 操作です。

こちらもご覧ください

適用対象

GetEnumerator(Int32, Int32)

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

パラメーター

index
Int32

列挙子が参照する ArrayList セクションの 0 から始まる開始インデックス。

count
Int32

列挙子が参照する ArrayList セクション内の要素の数。

返品

ArrayList内の指定した要素範囲のIEnumerator

例外

index が 0 未満です。

-または-

count が 0 未満です。

indexcount は、 ArrayListで有効な範囲を指定しません。

次の例では、 ArrayListの列挙子と、 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
'

注釈

C# 言語の foreach ステートメントでは、列挙子の複雑さが隠されます。 したがって、列挙子を直接操作するのではなく、 foreach を使用することをお勧めします。

列挙子を使用してコレクション内のデータを読み取ることができますが、基になるコレクションを変更するために使用することはできません。

最初は、列挙子はコレクション内の最初の要素の前に配置されます。 Reset また、列挙子をこの位置に戻します。 この位置では、 Current は未定義です。 したがって、MoveNextの値を読み取る前に、Currentを呼び出して列挙子をコレクションの最初の要素に進める必要があります。

Current は、 MoveNext または Reset が呼び出されるまで、同じオブジェクトを返します。 MoveNext は、 Current を次の要素に設定します。

MoveNextコレクションの末尾を渡すと、列挙子はコレクション内の最後の要素の後に配置され、MoveNextfalseを返します。 列挙子がこの位置にある場合、後続の MoveNext の呼び出しでも falseが返されます。 MoveNext false最後の呼び出しが返された場合、Currentは未定義です。 Currentをコレクションの最初の要素に再度設定するには、Resetを呼び出し、その後にMoveNextを呼び出します。

列挙子は、コレクションが変更されない限り有効なままです。 要素の追加、変更、削除など、コレクションに変更が加えられた場合、列挙子は回復不能に無効になり、その動作は未定義になります。

列挙子は、コレクションへの排他的アクセス権を持っていません。したがって、コレクションを通じた列挙は、本質的にスレッド セーフなプロシージャではありません。 列挙中のスレッド セーフを保証するために、列挙体全体の間にコレクションをロックできます。 読み取りと書き込みのためにコレクションに複数のスレッドからアクセスできるようにするには、独自の同期を実装する必要があります。

このメソッドは O(1) 操作です。

こちらもご覧ください

適用対象