Кто-либо может объяснить IEnumerable и IEnumerator мне? [закрытый]

Функция подстроки - это то, что вы ищете. Он встречается (вероятно) в каждом языке программирования.

Вот рабочий пример: https://www.w3schools.com/jsref/jsref_substring.asp

Также важно, если вы используете отрицательное число для параметров, оно будет подстрокой от «конца» строки вместо передней, или она будет считать назад, а не вперед.

У вас есть счетчик в вашем цикле, поэтому вы легко сможете сыграть и заставить его работать с этой функцией.

255
задан HoKy22 21 August 2013 в 07:20
поделиться

6 ответов

, например, когда использовать его по foreach?

Вы не используете IEnumerable "более чем" foreach. Реализация IEnumerable делает использование foreach возможным .

, Когда Вы пишете код как:

foreach (Foo bar in baz)
{
   ...
}

это функционально эквивалентно записи:

IEnumerator bat = baz.GetEnumerator();
while (bat.MoveNext())
{
   bar = (Foo)bat.Current
   ...
}

"функционально эквивалентным", я подразумеваю, что это на самом деле, во что компилятор поворачивает код. Вы не можете использовать foreach на [1 110] в этом примере если baz реализации IEnumerable.

IEnumerable средства, что baz реализации метод

IEnumerator GetEnumerator()

Эти IEnumerator объект, что этот метод возвраты должен реализовать методы

bool MoveNext()

и

Object Current()

первые усовершенствования метода к следующему объекту в эти IEnumerable объект, который создал перечислитель, возвратившись false, если это сделано, и вторые возвраты текущий объект.

Что-либо в .NET, которого можно выполнить итерации по реализациям IEnumerable. Если Вы создаете свой собственный класс, и он уже не наследовался классу, который реализует IEnumerable, можно сделать класс применимым в [1 120] операторы путем реализации IEnumerable (и путем создания класса перечислителя, который его новое GetEnumerator метод возвратит).

259
ответ дан Travis J 23 November 2019 в 02:46
поделиться

Реализация IEnumerable по существу средства, что объект может быть выполнен с помощью итераций. Это не обязательно означает, что это - массив, поскольку существуют определенные списки, которые не могут быть индексированы, но можно перечислить их.

IEnumerator фактический объект, используемый для выполнения повторений. Это управляет перемещением от одного объекта до следующего в списке.

Большую часть времени, IEnumerable & IEnumerator используются прозрачно в качестве части foreach цикл.

8
ответ дан Dan Herbert 23 November 2019 в 02:46
поделиться
  • объект, реализовывая IEnumerable позволяет другим посещать каждый из своих объектов (перечислителем) .
  • объект, реализовывая IEnumerator является выполнением повторения. Это - цикличное выполнение по счетному объекту.

Думают о счетных объектах со списков, стеков, деревьев.

15
ответ дан Lieven Keersmaekers 23 November 2019 в 02:46
поделиться

Реализация IEnumerable позволяет Вам получить IEnumerator для списка.

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

Прежде foreach реализация (в Java 1.4, например), способ выполнить итерации списка состоял в том, чтобы получить перечислитель из списка, затем попросить у этого "следующего" объекта в списке, столько, сколько значение, возвращенное как следующий объект, не является нулевым. Foreach просто делает это неявно как функцию языка, таким же образом та блокировка () реализует класс Монитора негласно.

я ожидаю работы foreach над списками, потому что они реализуют IEnumerable.

17
ответ дан Neil Barnwell 23 November 2019 в 02:46
поделиться

IEnumerable реализует GetEnumerator. При вызове тот метод возвратится IEnumerator, который реализует MoveNext, Сброс и Текущий.

Таким образом, когда Ваш класс реализует IEnumerable, Вы говорите, что можно назвать метод (GetEnumerator) и получить новый возвращенный объект (IEnumerator), можно использовать в цикле, таком как foreach.

22
ответ дан DavGarcia 23 November 2019 в 02:46
поделиться

Реализация IEnumerable означает Ваш класс, возвращает объект IEnumerator:

public class People : IEnumerable
{
    IEnumerator IEnumerable.GetEnumerator()
    {
        // return a PeopleEnumerator
    }
}

Реализация IEnumerator означает, что Ваш класс возвращает методы и свойства для повторения:

public class PeopleEnumerator : IEnumerator
{
    public void Reset()...

    public bool MoveNext()...

    public object Current...
}

Вот в чем разница так или иначе.

59
ответ дан BJ Myers 23 November 2019 в 02:46
поделиться
Другие вопросы по тегам:

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