오보에블로그
[C#API] IEnumerator & IEnumerable 본문
728x90
IEnumerator와 IEnumerable 사용 목적은 아래 링크를 참고한다.
IEnmerator
인터페이스 설명
public interface IEnumerator
{
// Enumerator의 열거자에서 현재 바라보고 있는 위치를 반환
object? Current { get; }
// 열거자에서 다음 element로 이동하는 함수
bool MoveNext();
// 열거자에서 현재 바라보고 있는 위치를 초기로 변환
void Reset();
}
IEnumerable
인터페이스 설명
public interface IEnumerable
{
// 열거자에 대한 Enumerator 반환
IEnumerator GetEnumerator();
}
IEnumerator
, IEnumerable
이용 예시
class Student
{
public Student(string Name, int age)
{
this.Name = Name;
this.age = age;
}
public string Name;
public int age;
}
class Group : IEnumerable
{
private Student[] _students;
string _teacher;
public Group(Student[] students, string teacher)
{
_students = new Student[students.Length];
for (int i = 0; i < students.Length; i++)
_students[i] = students[i];
_teacher = teacher;
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public GroupEnum GetEnumerator()
{
return new GroupEnum(_students);
}
}
class GroupEnum : IEnumerator
{
public Student[] _students;
int position = -1;
public GroupEnum(Student[] list)
{
_students = list;
}
object IEnumerator.Current
{
get
{
return Current;
}
}
public bool MoveNext()
{
position++;
return (position < _students.Length);
}
public void Reset()
{
position = -1;
}
public Student Current
{
get
{
try
{
return _students[position];
}
catch (IndexOutOfRangeException)
{
throw new InvalidOperationException();
}
}
}
}
728x90
'C++ & C# > C#' 카테고리의 다른 글
[C#API] Comparison<T> (0) | 2021.12.30 |
---|---|
[C#API] 알아두면 유용한 IEnumerable 관련 메소드 (0) | 2021.12.16 |
[C# API] String Builder (0) | 2021.10.21 |
[c#] Longest Common Substring (0) | 2019.08.04 |
[c#] TimeOutException이 catch되지 않을때 (0) | 2019.08.04 |