|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
10.09.2016, 19:45 | #1 |
Пользователь
Регистрация: 31.01.2016
Сообщений: 67
|
Цикл foreach при работе с коллекциями и массивами
Всем привет. Начал ищучение коллекцийи цикла foreach приминяемого для работы с ними.
Имеется банальный, так сказать тренировачный пример: Модуль element.cs Код:
Код:
Код:
Если же мы снимаем комментарий со строки(см рисунок 2) Код:
После этого автор видеокурса, который я смотрю предлагает рассмотреть работу цикла foreach вместе с массивом а не с коллекциями. Код:
Самое интрестное, что автор говорит, цитирую - "На самом деле, все массывы в C# - являются настоящими коллекциями. В C# не существует массивов - это всего лишь иллюзия и удобный синтаксис." Аргументируя это вот чем: Код:
Но вот в чем мой вопрос:Почему в "обычных" коллекциях - т.е которые мы создаем сами нужно сбрасывать position для повторного проходп ро коллекции с помощью цикла foreach еще раз, а в обычном массиве, который по славам автора также является коллекцие - мы не производим этого действия? (правда в строение класса Array я не углублялся и не знаю, присутствует ли в нем вообще некий указатель? Может хоть и класс Array и реалезует интерфейс IEnumerable в нем (в классе) может не существовать подобного механизма - я не знаю) |
10.09.2016, 20:14 | #2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Потому что автор так реализовал.
В стандартных коллекциях как-то так: Код:
http://www.programmersforum.ru/forumdisplay.php?f=55
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
10.09.2016, 21:14 | #3 | |
Пользователь
Регистрация: 31.01.2016
Сообщений: 67
|
Цитата:
и да, извиняюсь за неправильное создантетемы |
|
10.09.2016, 21:31 | #4 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
Во всех стандартных (и нормально реализованных не стандартных) коллекциях не нужно.
GetEnumerator обычно возвращает каждый раз новый объект, а не тот же самый.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
10.09.2016, 22:19 | #5 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
где вы таких авторов находите )))
|
10.09.2016, 22:20 | #6 |
Пользователь
Регистрация: 31.01.2016
Сообщений: 67
|
itvdn курс C# Essential урок 14
|
10.09.2016, 22:25 | #7 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
так а в чем цель примера? как 2 сущности в одну слить?
|
10.09.2016, 22:28 | #8 |
Пользователь
Регистрация: 31.01.2016
Сообщений: 67
|
неи, пример кода приведен для ролноты картины для отвечающих.
а вопрос почему в массиве, который по словам автора является коллекцие не нужно сбрасывать position, а в данном примере мы вручную вызываем reset() - в обычной коллекции, которую пишем самостоятельно? Вот и все. |
10.09.2016, 22:33 | #9 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
потому что наша коллекция так реализована.
вам же выше объяснили что для обычных коллекций это не нужно, потому что там енумераторы чистые всегда. у нас же енумератор всегда один. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
10.09.2016, 22:35 | #10 |
Участник клуба
Регистрация: 21.10.2015
Сообщений: 1,361
|
на то вам уже ответили, автор так вывернул...
напиши он хотябы так IEnumerator IEnumerable.GetEnumerator() { return elementsArray.GetEnumerator(); } то не надо было никакого ресета, а так он сделал то что я вам и написал, 2 в 1 и потому ресеты и пришлось расставлять между форычами |
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Borland c++ ошибка при работе с массивами | all_is_fear | Помощь студентам | 2 | 05.11.2011 23:11 |
Ошибка при работе с динамическими массивами | GBAXA | Общие вопросы Delphi | 16 | 30.03.2011 09:28 |
процедуры и функции при работе с массивами | irina belka | Помощь студентам | 1 | 12.12.2010 16:33 |
Переполненние стека при работе с массивами | max&ilja | Помощь студентам | 2 | 22.12.2009 22:03 |
Цикл do while при работе со строками. | Lazio | Помощь студентам | 7 | 11.10.2009 16:11 |