Yield return Flashcards

1
Q

Какой интерфейс должен быть реализован, чтобы тип можно было использовать в foreach?

A

IEnumerable< T >

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Какие методы содержит IEnumerator< T >? Что делает каждый из них?

A

void Reset(); Позиционирует Enumerator на начало коллекции T Current {get;} Возвращает значение текущего элемента bool MoveNext(); Сдвигается на следующий элемент. Если получилось, то возвращает true. Иначе — false. Есть ещё object Current {get;} и Dispose()

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Что делает foreach?

A

Получает Enumerator Вызывает MoveNext у него Если вернулось false, то перебор закончен Если вернулось true, то получает Current и возвращает его, а затем переходит на шаг 2. (На самом деле в конце итерирования ещё и вызывает метод Dispose)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Что делает yield return?

A

Создает прерываемый метод, возвращающий последовательность значений. Каждое значение, которое передается в yield return станет элементом последовательности.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Что делает yield break?

A

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

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

В чем преимущество ленивых коллекций?

A

Элементы вычисляются по запросу. Последовательность не хранится полностью в памяти.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Что означает термин “ленивость” по отношению к методу, принимающему и возвращающему IEnumerable?

A

Метод отложит получение элементов из входной коллекции до тех пор, пока они не понадобятся для вычисления очередного элемента результирующей коллекции. Как правило ленивые методы реализуются с помощью yield return или с помощью комбинирования других ленивых методов.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Как можно реализовать бесконечный IEnumerable?

A

Бесконечным циклом с yield return внутри

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Можно ли реализовать IEnumerable, который будет возвращать разные значений при каждом новом его перечислении?

A

Да, например циклом, внутри которого yield return, возвращающий случайные значения.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Можно ли получить количество элементов IEnumerable не перечисляя его весь?

A

В общем случае нет. Но многие коллекции, реализующие IEnumerable, содержат ещё и свойство Count.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly