IEnumerable インターフェイス
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
列挙子を公開します。この列挙子は、非ジェネリック コレクションに対する単純な反復処理をサポートします。
public interface class IEnumerable
public interface IEnumerable
[System.Runtime.InteropServices.Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
public interface IEnumerable
[System.Runtime.InteropServices.Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")]
[System.Runtime.InteropServices.ComVisible(true)]
public interface IEnumerable
type IEnumerable = interface
[<System.Runtime.InteropServices.Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")>]
type IEnumerable = interface
[<System.Runtime.InteropServices.Guid("496B0ABE-CDEE-11d3-88E8-00902754C43A")>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type IEnumerable = interface
Public Interface IEnumerable
- 派生
- 属性
次のコード例は、IEnumerable インターフェイスと IEnumerator インターフェイスを実装してカスタム コレクションを反復処理するためのベスト プラクティスを示しています。 この例では、これらのインターフェイスのメンバーは明示的に呼び出されませんが、コレクションを反復処理するための foreach
(Visual Basic のFor Each
) の使用をサポートするために実装されています。 この例は、完全なコンソール アプリです。 Visual Basic アプリをコンパイルするには、プロジェクトの [プロパティ] ページで、Startup オブジェクト を Sub Main に変更します。
using System;
using System.Collections;
// Simple business object.
public class Person
{
public Person(string fName, string lName)
{
this.firstName = fName;
this.lastName = lName;
}
public string firstName;
public string lastName;
}
// Collection of Person objects. This class
// implements IEnumerable so that it can be used
// with ForEach syntax.
public class People : IEnumerable
{
private Person[] _people;
public People(Person[] pArray)
{
_people = new Person[pArray.Length];
for (int i = 0; i < pArray.Length; i++)
{
_people[i] = pArray[i];
}
}
// Implementation for the GetEnumerator method.
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator) GetEnumerator();
}
public PeopleEnum GetEnumerator()
{
return new PeopleEnum(_people);
}
}
// When you implement IEnumerable, you must also implement IEnumerator.
public class PeopleEnum : IEnumerator
{
public Person[] _people;
// Enumerators are positioned before the first element
// until the first MoveNext() call.
int position = -1;
public PeopleEnum(Person[] list)
{
_people = list;
}
public bool MoveNext()
{
position++;
return (position < _people.Length);
}
public void Reset()
{
position = -1;
}
object IEnumerator.Current
{
get
{
return Current;
}
}
public Person Current
{
get
{
try
{
return _people[position];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
}
class App
{
static void Main()
{
Person[] peopleArray = new Person[3]
{
new Person("John", "Smith"),
new Person("Jim", "Johnson"),
new Person("Sue", "Rabon"),
};
People peopleList = new People(peopleArray);
foreach (Person p in peopleList)
Console.WriteLine(p.firstName + " " + p.lastName);
}
}
/* This code produces output similar to the following:
*
* John Smith
* Jim Johnson
* Sue Rabon
*
*/
Imports System.Collections
' Simple business object.
Public Class Person
Public Sub New(ByVal fName As String, ByVal lName As String)
Me.firstName = fName
Me.lastName = lName
End Sub
Public firstName As String
Public lastName As String
End Class
' Collection of Person objects, which implements IEnumerable so that
' it can be used with ForEach syntax.
Public Class People
Implements IEnumerable
Private _people() As Person
Public Sub New(ByVal pArray() As Person)
_people = New Person(pArray.Length - 1) {}
Dim i As Integer
For i = 0 To pArray.Length - 1
_people(i) = pArray(i)
Next i
End Sub
' Implementation of GetEnumerator.
Public Function GetEnumerator() As IEnumerator _
Implements IEnumerable.GetEnumerator
Return New PeopleEnum(_people)
End Function
End Class
' When you implement IEnumerable, you must also implement IEnumerator.
Public Class PeopleEnum
Implements IEnumerator
Public _people() As Person
' Enumerators are positioned before the first element
' until the first MoveNext() call.
Dim position As Integer = -1
Public Sub New(ByVal list() As Person)
_people = list
End Sub
Public Function MoveNext() As Boolean Implements IEnumerator.MoveNext
position = position + 1
Return (position < _people.Length)
End Function
Public Sub Reset() Implements IEnumerator.Reset
position = -1
End Sub
Public ReadOnly Property Current() As Object Implements IEnumerator.Current
Get
Try
Return _people(position)
Catch ex As IndexOutOfRangeException
Throw New InvalidOperationException()
End Try
End Get
End Property
End Class
Class App
Shared Sub Main()
Dim peopleArray() As Person = { _
New Person("John", "Smith"), _
New Person("Jim", "Johnson"), _
New Person("Sue", "Rabon")}
Dim peopleList As New People(peopleArray)
Dim p As Person
For Each p In peopleList
Console.WriteLine(p.firstName + " " + p.lastName)
Next
End Sub
End Class
' This code produces output similar to the following:
'
' John Smith
' Jim Johnson
' Sue Rabon
IEnumerable は、列挙可能なすべての非ジェネリック コレクションの基本インターフェイスです。 このインターフェイスの汎用バージョンについては、System.Collections.Generic.IEnumerable<T>を参照してください。 IEnumerable には、IEnumeratorを返す 1 つのメソッド GetEnumeratorが含まれています。 IEnumerator では、Current プロパティと MoveNext メソッドと Reset メソッドを公開することで、コレクションを反復処理する機能が提供されます。
foreach
(Visual Basic のFor Each
) 構文を有効にするには、コレクション クラスに IEnumerable と IEnumerator を実装することをお勧めしますが、IEnumerable の実装は必要ありません。 コレクションに IEnumerableが実装されていない場合でも、インターフェイス、クラス、または構造体を返す GetEnumerator
メソッドを提供することで、反復子パターンに従ってこの構文をサポートする必要があります。 Visual Basic を使用する場合は、GetEnumerator
によって返される IEnumerator 実装を指定する必要があります。 C# を使用して開発するときは、IEnumeratorで説明されているように、Current
プロパティと MoveNext
メソッドと Reset
メソッドを含むクラスを指定する必要がありますが、クラスは IEnumeratorを実装する必要はありません。
Get |
コレクションを反復処理する列挙子を返します。 |
Cast<TResult>(IEnumerable) |
IEnumerable の要素を指定した型にキャストします。 |
Of |
指定した型に基づいて、IEnumerable の要素をフィルター処理します。 |
As |
クエリの並列化を有効にします。 |
As |
IEnumerable を IQueryableに変換します。 |
製品 | バージョン |
---|---|
.NET | Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9 |
.NET Framework | 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1 |
.NET Standard | 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1 |
UWP | 10.0 |
.NET に関するフィードバック
.NET はオープンソース プロジェクトです。 フィードバックを提供するにはリンクを選択します。