2015-04-15 1 views
3

Я вроде новичок в C# я знаю метод, определенный в интерфейсе должен быть реализованIEnumerator.MoveNext() реализация?

, но в коде ниже я не реализован MoveNext() метод

static void Main() 
{ 
    List<int> list = new List<int>(); 
    list.Add(1); 
    list.Add(5); 
    list.Add(9); 

    List<int>.Enumerator e = list.GetEnumerator(); 
    Write(e); 
} 

static void Write(IEnumerator<int> e) 
{ 
    while (e.MoveNext()) 
    { 
     int value = e.Current; 
     Console.WriteLine(value); 
    } 
} 

Я проверил в метаданных слишком , & он не обеспечивает никакой реализации.

так почему компилятор не несет никакой ошибки? где реализуется метод MoveNext() & как он переходит к следующему значению?

Является ли код для метода MoveNext() автоматически генерируемым компилятором? пожалуйста, помогите

+0

Вы звоните 'list.GetEnumerator()'. Это возвращает экземпляр 'IEnumerator '. Зачем вам нужно его реализовать, когда у вас есть экземпляр? :) – Luaan

+0

Если бы у вас был 'class myClass: IEnumerator ', тогда он заставил бы вас «реализовать» следующий шаг. Но вы не объявили, что ваш класс имеет тип 'IEnumerator ', вы его потребляете. – paqogomez

ответ

5

Причина заключается в том, вы не выполнили IEnumerator<int>, вы использовали List<int>, который реализовал ее и при условии осуществления для MoveNext.

Вот actual implementation и код:

public bool MoveNext() { 

    List<T> localList = list; 

    if (version == localList._version && ((uint)index < (uint)localList._size)) 
    {              
     current = localList._items[index];      
     index++; 
     return true; 
    } 
    return MoveNextRare(); 
} 
Смежные вопросы