Насколько я знаю, если вы используете интерфейс, вы должны реализовать все определения внутри интерфейса, в этом случае, просматривая структуру Enumerator, я заметил, что эта структура использует интерфейс IEnumerator:
public struct Enumerator : IEnumerator<T>, IDisposable, IEnumerator
{
public T Current { get;}
public void Dispose();
public bool MoveNext();
}
И IEnumerator определяется следующим образом:
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
Но я не вижу никакой реализации IEnumerator в Enumerator, как это возможно?
Более того, я пытаюсь определить свою собственную структуру и пытаюсь использовать IEnumerator так же, как это делает структура Enumerator:
public struct myOwnStruct : IEnumerator
{
public Current { get;}
void Reset();
public bool MoveNext();
}
И компилятор говорит, что для IEnumerator нет реализации.
Итак, как объяснить, что структура Enumerator использует интерфейс, но никогда не предоставляет реализацию?
IEnumerable
, должно будет реализоватьIEnumerator
. Предполагается, что перечислитель предназначен для перечисления вашей коллекции, поэтому вам нужно реализовать его в зависимости от того, как работает ваша коллекция! - person Callum Linington   schedule 06.06.2016IEnumerable<T>
, потому что есть 2 методаGetEnumerator
, которые отличаются только типом возвращаемого значения, поэтому вы должны реализовать хотя бы один явно. - person Kyle   schedule 06.06.2016