#asp.net #.net #foreach
#asp.net #.net #foreach
Вопрос:
Я хочу сказать, что мой код работает правильно, но я не знаю, почему он так работает. Итак, чтобы было понятно, вот мой код:
List<NewsFlash> newsfl = tsm.getNewsFlashes();
foreach (NewsFlash item in newsfl)
{
item.smartform.dtDate = item.smartform.dtDate.ToShortDateString();
}
//Get all the newsFlash items and bind to the repeater
rptNewsFlash.DataSource = newsfl;
rptNewsFlash.DataBind();
Как вы можете видеть, я зацикливаю список newsfl
и редактирую item.smartform.dtDate
. Что для меня странно, так это то, что когда я редактирую item.smartform.dtDate
, свойство dtDate
в списке newsfl
также изменяется. Это то, что я хочу, но я думаю, это немного странно, потому item
что внутри цикла foreach не имеет ничего общего со списком newsfl
?
Надеюсь, вы поняли мой вопрос.
Спасибо
Ответ №1:
Каждый item
foreach
элемент — это просто ссылка на элемент с определенным индексом внутри newsfl
— поэтому, когда ваш цикл завершен, вы обновили все item
элементы в списке, и эти элементы сохраняют эти изменения. Это имеет смысл, потому что каждый элемент не является копией оригинала, это оригинал.
Итак, представьте item
, newsfl[n]
что в одной комнате две двери, и вы оказываетесь в одном и том же месте — и не имеет значения, через какую дверь я прихожу, если я начинаю передвигать мебель, она также перемещается для любого, кто входит через любую дверь.
С другой стороны, если бы этого не произошло, чего бы вы ожидали? Поскольку вы вносите изменения item
, вы, конечно, хотите их сохранить?
Комментарии:
1. Я тестировал это. Я имел в виду создать еще один список и добавить все элементы в этот вновь созданный список в цикле. Но я не знал этой функции, поэтому теперь стало проще. Спасибо
Ответ №2:
В строке foreach (NewsFlash item in newsfl)
вы берете ссылку called item
на каждую из записей newsfl
. Это не создает копию элемента, а просто ссылку на элемент в списке.
Таким образом, если вы обновите значение on item
, запись in newfl
также будет обновлена.
Ответ №3:
Почему это не должно быть изменено? Объект «item» в вашем цикле foreach — это точно такой же объект, как и в вашем списке «newsfl». На самом деле объект «item» указывает только на правильный объект в списке.