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
- 파생
- 특성
예제
다음 코드 예제에서는 및 IEnumerator 인터페이스를 구현하여 사용자 지정 컬렉션을 반복하는 IEnumerable 모범 사례를 보여 줍니다. 이 예제에서 이러한 인터페이스의 멤버는 명시적으로 호출되지 않지만 컬렉션을 반복하는 데 (For Each
Visual Basic의 경우)를 사용하도록 foreach
지원하도록 구현됩니다. 이 예제는 완전한 콘솔 앱입니다. Visual Basic 앱을 컴파일하려면 프로젝트의 속성 페이지에서 시작 개체를 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 에는 를 반환하는 단일 메서드 GetEnumerator가 포함되어 있습니다 IEnumerator. IEnumerator는 속성 및 MoveNextReset 메서드를 노출하여 컬렉션을 반복하는 Current 기능을 제공합니다.
(Visual Basic의 경우) 구문을 사용하도록 설정For Each
foreach
하기 위해 컬렉션 클래스에서 및 IEnumerator 을 구현 IEnumerable 하는 IEnumerable 것이 가장 좋지만 구현은 필요하지 않습니다. 컬렉션에서 를 구현 IEnumerable하지 않는 경우 인터페이스, 클래스 또는 구조체를 반환하는 메서드를 GetEnumerator
제공하여 이 구문을 지원하려면 반복기 패턴을 따라야 합니다. Visual Basic을 사용하는 경우 에서 반환GetEnumerator
되는 구현을 IEnumerator 제공해야 합니다. C#을 사용하여 개발하는 경우 에서 설명IEnumerator한 대로 속성 및 및 Reset
MoveNext
메서드를 포함하는 Current
클래스를 제공해야 하지만 클래스는 를 구현IEnumerator할 필요가 없습니다.
메서드
GetEnumerator() |
컬렉션을 반복하는 열거자를 반환합니다. |
확장 메서드
Cast<TResult>(IEnumerable) |
IEnumerable의 요소를 지정된 형식으로 캐스팅합니다. |
OfType<TResult>(IEnumerable) |
지정된 형식에 따라 IEnumerable의 요소를 필터링합니다. |
AsParallel(IEnumerable) |
쿼리를 병렬화할 수 있도록 합니다. |
AsQueryable(IEnumerable) |
IEnumerable을 IQueryable로 변환합니다. |
적용 대상
추가 정보
피드백
다음에 대한 사용자 의견 제출 및 보기