# IEnumerator, IEnumerable를 상속
IEnumerator GetEnumerator();
object Current { get; };
bool MoveNext();
void Reset();
object Current
class MyList:IEnumerator, IEnumerable
{
public int[] array;
int position = -1;
public MyList()
{
// 초기생성시 배열크기 3 지정
array = new int[3];
}
public int this[int idx]
{
get
{
// array[idx]에 해당하는 값 리턴
return array[idx];
}
set
{
// 입력하려는 인덱스가 현재 array보다 크거나 같을 경우
if (idx >= array.Length)
{
// array 리사이징
Array.Resize<int>(ref array, idx + 1);
// 리사이징 알림문구 출력
Console.WriteLine("Array Resized : {0}", array.Length);
}
// array[idx]에 해당값 입력
array[idx] = value;
}
}
###############################################################
public object Current {
get
{
// 현재 위치(position)의 값을 리턴
return array[position];
}
}
public IEnumerator GetEnumerator()
{
for (int i = 0; i < array.Length; i++)
{
//yield return (array[i]);
yield return (array[i]);
}
}
public bool MoveNext()
{
// 현재 위치값이 배열크기-1가 같을 경우
if (position == array.Length - 1)
{
// 현재 위치값 초기화
Reset();
return false;
}
// 현재 위치값 +=1
position++;
// 현재 위치값보다 배열 크기가 true, 아닐 경우 false
return (position < array.Length);
}
public void Reset()
{
// 현재 위치값 '-1' 초기화
position = -1;
}
###############################################################
public static void main() {
MyList ml = new MyList();
for (int i = 0; i < 10; i++)
{
ml[i] = i;
}
//for (int i = 0; i < ml.array.Length; i++)
//{
// Console.WriteLine(ml[i]);
//}
foreach (int value in ml)
{
Console.WriteLine(value);
}
}
}