Здравствуйте, Serginio1, Вы писали:
I>>А теперь читай себя же:
I>>"Да но именно yield и создает IEnumerable ленивым."
I>>А теперь сравни с тем, что тебе пишу:
I>>"Ты в любой момент можешь отказаться от вызова MoveNext, а следовательно, IEnumerable сам по себе ленивый, безо всякого yield."
I>>Ты сам то видишь, как ты переобуваешься? Вот я и говорю — или ты ногой сообщения строчишь, или вот такой порядок у тебя в голове.
S> yield это конструкция создания класса обертки енумератора. Да yield создает енумератор.
Это ты уже переобулся. А днём ранее утверждал совсем другое "Да но именно yield и создает IEnumerable ленивым."
Эта фраза означает, ни много ни мало, что это благодаря yielf IEnumerable становится ленивым.
I>>Ты приводишь бенефит итератора, а не yield
I>>Ты что, сам не можешь понять чего пишешь?
S> Еще раз смотрим исходники и смотрим что практически все енумераторы создаются через yield!!!!!
Именно. Их используют ради бенефитов IEnumerable. FirstOrDefault() — такой фокус появился еще до появления yield.
Практически сразу, как некто начинает использовать итератор, приходится решать задачу "первый или дефолтный"
Такое писали ещё в 90х.
А теперь чудо — всё это стало возможным благодаря yield
I>>На счет мелочей — ты считаешь что yield/IEnumerable и есть общий случай. IQueryable для тебя, похоже, не существует.
I>>И это у тебя "yield делает IEnumerable ленивым"
S> Да да да!! Он создает иэнумератор через отдельный класс, а не через List или массив!!!
IEnumerable ленивый всегда, независимо от способа создания. Всегда, потому как ты в любой момент можешь отказаться от MoveNext.
Ты похоже сам не понимаешь своей фразы.
I>>Мои слова — yield имеет ценую — ты интерпретируешь, как "yield отстой". Ты адекватен?
S> Вот ты и не показал показал как программировать енумератор без yield.
S>Ручками создавать все тоже, что и делает компилятор обрабатывая yield
Ты снова подменяешь тему. Цену в рантайме ты подменяешь ценой в разработке. Похоже, если цена и там, и там, то для тебя это одно и то же.
I>>Правильно — ленивость это итератор. А вот yield это сахар, об чем я тебя пишу давным давно.
S> Но без этого сахара практически нахрен не нужен Linq. List тоже итератор, но его то нужно нелениво заполнить!
Вот еще одно заблуждение. С С++ и джавой ты не знаком?
I>>Ты путаешь рантайм с разработкой.
S> В чем!!
А чуть выше ты соскакиваешь с цены в рантайме на цену в разработке.
Например, когда я пишу, что IEnumerable имеет свою цену, ты начинаешь вещать про разработку.
I>>Похоже, раз я с чем то не согласен, значит я вобще ни с чем не согласен?
S> Да непонятно с чем ты не согласен!!
А ты пробуй читать внимательно.
S>Для тебя yield сахар ненужный и тормозящий. Нужно работать через List я так понимаю.
Это нужный сахар. И тем не менее его нельзя использовать бездумно. В числодробилках он может давать конские потери.
S>В нем можно обращаться по индексу, о чем ты так восхищался!
S>S>yield сам по себе вносит потери. Неважно, есть лишние циклы, или нет. x[i] заменяется на доступ через итератор. Вот уже проблема.
Именно. Профайлер утверждает, что экономия может быть и полтора, и два, и даже десять раз.