169 похожих чатов

Варіант з IList працює. Чи можна десь почитати про подібні

особливості поведінки IEnumerable ? Бо, скажімо, в MSDN згадок цього немає.

8 ответов

20 просмотров

якщо чесно - хз, як бачиш люди тут самостійно пояснюють) є https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/iterators але він як русофобія - недостатній

IEnumerable скрывает реализацию под собой Эта реализация может иметь представление в памяти (как писал Арсений "коллекция элементов") А может иметь машину состояний (некий класс, который будет вычислять элементы последовательно по одному исходя из некой логики, логика отличается от метода до метода в linq) И главный поинт в том, что эта стейт машина не кэширует результат предыдущего прохода, она просто начинает вычислять элементы заново

Oleh-Prostakov Автор вопроса
Vova Lantsov 🇺🇦
IEnumerable скрывает реализацию под собой Эта реал...

І, оскільки таски в C# представлені як машини станів, IEnumerable не створив колекцію, так ?

Oleh Prostakov
І, оскільки таски в C# представлені як машини стан...

Тут дело не в тасках Да, таски работают по схожему принципу

Oleh Prostakov
І, оскільки таски в C# представлені як машини стан...

ще додам IEnumerable<T> потребує реалізації виключно IEnumerator<T> GetEnumerator(), де в свою чергу IEnumerator<T> потрібен задля своїх bool MoveNext() та T Current таким чином, коли в вас є абстрактний IEnumerable<T> то компілятор перетворює foreach (var item in enumerable) на using var enumerator = enumerable.GetEnumerator() while (enumerator.MoveNext() { var item = enumerator.Current; // foreach body }

Oleh Prostakov
І, оскільки таски в C# представлені як машини стан...

На самом деле можно на аналогиях объяснить намного проще Итерация linq метода это примерно следующее Ты подошёл к автомату со снеками, купил одну штуку, отошёл в сторону и съел, затем вернулся и купил вторую штуку, затем снова отошёл и съел, и так далее А .ToList() на этом методе это ты подошёл сразу с корзинкой, купил все снеки по одному, и ушёл сразу со всеми При чём если ты потом попробуешь заново итерировать объект, то в первом случае ты снова будешь получать НОВЫЕ снеки из автомата, ведь он тебе те что ты уже получил - не выдаст снова А в случае с корзинкой, ты повторно переберешь те снеки, что у тебя были

Vova Lantsov 🇺🇦
На самом деле можно на аналогиях объяснить намного...

ем а як він їй загрузить назад в автомат якщо він їх вже зїв

Гикер †315620⚰️
ем а як він їй загрузить назад в автомат якщо він ...

Ладно, не съел, просто отошёл этикетку почитать Читать её можно сколько угодно

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

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта