Каково различие между IEnumerator и IEnumerable? [дубликат]

Перейдите в gradle и найдите targetSdkVersion = 25 . Измените его, чтобы использовать Android targetSdkVersion = 26

95
задан Community 23 May 2017 в 12:09
поделиться

4 ответа

IEnumerable является интерфейсом, который определяет один метод GetEnumerator, который возвращается интерфейс IEnumerator, это в свою очередь предоставляет доступ только для чтения к набору. Набор, который реализует IEnumerable, может использоваться с foreach оператором.

пример кода Определения

IEnumerable 

public IEnumerator GetEnumerator();

IEnumerator

public object Current;
public void Reset();
public bool MoveNext();

с codebetter.com

108
ответ дан cgreeno 24 November 2019 в 05:49
поделиться

IEnumerator вещь, которая может перечислить: это имеет Current свойство и MoveNext и Reset методы (которые в.NET кодируют Вас, вероятно, не будет звонить явно, хотя Вы могли).

IEnumerable вещь, которая может быть перечислена..., который просто означает, что она имеет метод GetEnumerator, который возвращается IEnumerator.

, Который Вы используете? Единственная причина использовать IEnumerator состоит в том, если у Вас есть что-то, что имеет нестандартный способ перечислить (то есть, возврата его различных элементов один за другим), и необходимо определить, как это работает. Вы создали бы новый класс, реализовав IEnumerator. Но необходимо было бы все еще возвратить это IEnumerator в IEnumerable класс.

Для взгляда на то, на что похож перечислитель (реализующий IEnumerator<T>), посмотрите любой Enumerator<T> класс, такой как те содержавшиеся в [1 112], Queue<T>, или Stack<T>. Для взгляда на класс, реализовывая IEnumerable, посмотрите любой стандартный класс набора.

65
ответ дан Ryan Lundy 24 November 2019 в 05:49
поделиться

Enumerator шоу Вы объекты в списке или наборе. Каждый экземпляр Перечислителя в определенном положении (1-й элемент, 7-й элемент, и т.д.) и может дать Вам, что элемент (IEnumerator.Current) или перемещается в следующий (IEnumerator.MoveNext). Когда Вы пишете foreach цикл в C#, компилятор генерирует код, который использует Перечислитель.

Enumerable класс, который может дать Вам Enumerator с. Это имеет метод, названный GetEnumerator, который дает Вам Enumerator, который смотрит на его объекты. Когда Вы пишете foreach цикл в C#, код, который он генерирует вызовы GetEnumerator для создания эти Enumerator используемый циклом.

15
ответ дан iliketocode 24 November 2019 в 05:49
поделиться

IEnumerable и IEnumerator оба интерфейсы. IEnumerable имеет всего один метод, названный GetEnumerator. Эти возвраты метода (поскольку все методы возвращают что-то включая пустоту), другой тип, который является интерфейсом и что интерфейс IEnumerator. При реализации логики перечислителя в любом классе набора Вы реализуете IEnumerable (или универсальный или не универсальные). IEnumerable имеет всего один метод, тогда как IEnumerator имеет 2 метода (MoveNext и Reset) и свойство Current. Поскольку легкое понимание рассматривает IEnumerable как поле, которое содержит IEnumerator внутренняя часть оно (хотя не посредством наследования или включения). Посмотрите код для лучшего понимания:

class Test : IEnumerable, IEnumerator
{
    IEnumerator IEnumerable.GetEnumerator()
    {
        throw new NotImplementedException();
    }

    public object Current
    {
        get { throw new NotImplementedException(); }
    }

    public bool MoveNext()
    {
        throw new NotImplementedException();
    }

    public void Reset()
    {
        throw new NotImplementedException();
    }
}
10
ответ дан PaulG 24 November 2019 в 05:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: