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 앱을 컴파일하려면 프로젝트의 속성 페이지에서 시작 개체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반환하는 단일 메서드 GetEnumerator포함합니다. IEnumerator Current 속성과 MoveNext 및 Reset 메서드를 노출하여 컬렉션을 반복하는 기능을 제공합니다.
컬렉션 클래스에서 IEnumerable 및 IEnumerator 구현하여 foreach
(Visual Basic의For Each
) 구문을 사용하도록 설정하는 것이 가장 좋지만 IEnumerable 구현할 필요는 없습니다. 컬렉션이 IEnumerable구현하지 않는 경우에도 반복기 패턴을 따라 인터페이스, 클래스 또는 구조체를 반환하는 GetEnumerator
메서드를 제공하여 이 구문을 지원해야 합니다. Visual Basic을 사용하는 경우 GetEnumerator
반환되는 IEnumerator 구현을 제공해야 합니다. C#을 사용하여 개발할 때는 IEnumerator설명한 대로 Current
속성과 MoveNext
및 Reset
메서드를 포함하는 클래스를 제공해야 하지만 클래스는 IEnumerator구현할 필요가 없습니다.
메서드
GetEnumerator() |
컬렉션을 반복하는 열거자를 반환합니다. |
확장 메서드
Cast<TResult>(IEnumerable) |
IEnumerable 요소를 지정된 형식으로 캐스팅합니다. |
OfType<TResult>(IEnumerable) |
지정된 형식에 따라 IEnumerable 요소를 필터링합니다. |
AsParallel(IEnumerable) |
쿼리의 병렬 처리를 사용하도록 설정합니다. |
AsQueryable(IEnumerable) |
IEnumerable IQueryable변환합니다. |
적용 대상
추가 정보
.NET
피드백
https://aka.ms/ContentUserFeedback
출시 예정: 2024년 내내 콘텐츠에 대한 피드백 메커니즘으로 GitHub 문제를 단계적으로 폐지하고 이를 새로운 피드백 시스템으로 바꿀 예정입니다. 자세한 내용은 다음을 참조하세요.다음에 대한 사용자 의견 제출 및 보기