Реализация двунаправленного перечислителя в C#

Когда вы перенаправляете пользователя на сайт входа в систему для получения кода авторизации, убедитесь, что вы обновили URL-адрес, чтобы включить обновленные разрешения в параметр запроса scope

// Line breaks for legibility only

https://login.microsoftonline.com/{tenant}/oauth2/v2.0/authorize?
client_id=6731de76-14a6-49ae-97bc-6eba6914391e
&response_type=code
&redirect_uri=http%3A%2F%2Flocalhost%2Fmyapp%2F
&response_mode=query
&scope=offline_access%20user.read%20mail.read%20task.read
&state=12345
5
задан Alexey Romanov 16 January 2009 в 16:46
поделиться

6 ответов

Не непосредственно от блока итератора, нет.

Однако вызывающая сторона может всегда буферизовать результаты, например, в a List<T>, или просто звоните Reverse() - но это не всегда применяется.

5
ответ дан 18 December 2019 в 10:49
поделиться

Нет, конечный автомат, сгенерированный компилятором C#, строго вперед.

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

(Так же что-либо, что генерировало данные некоторым способом с потерями. Вообразите итератор, который возвратил новое управление Conway по Жизни на каждом повторении - существует несколько плат, которые, возможно, все были предыдущим, так для движения назад снова необходимо помнить то, что Вы уже возвратили.)

5
ответ дан 18 December 2019 в 10:49
поделиться

Библиотека C5 Collections (http://www.itu.dk/research/c5/) реализует наборы и связанный список с назад перечислением. Проектом является OpenSource, таким образом, необходимо смочь найти ответ там.

1
ответ дан 18 December 2019 в 10:49
поделиться

Нет. Одно из ограничений IEnumerator - то, что он содержит свое текущее состояние, и он не помнит свое предшествующее состояние. В результате IEnumerable вперед только.

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

1
ответ дан 18 December 2019 в 10:49
поделиться

На самом деле, кажется, существует подход, описанный в Ускоренном 2008 C#. К сожалению, две страницы не видимы в предварительном просмотре, и он должен полагаться на отражение (результаты которого могут кэшироваться, как обычно), но можно получить суть.

1
ответ дан 18 December 2019 в 10:49
поделиться

Нет. Использование yield результаты в IEnumerable который однонаправлен.

0
ответ дан 18 December 2019 в 10:49
поделиться
Другие вопросы по тегам:

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