我想说我的代码工作正常,但我不知道为什么它会像那样工作。所以说清楚,这是我的代码:
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
也会发生变化。这就是我想要的,但我认为这有点奇怪,因为foreach循环中的item
与列表newsfl
无关?
希望你理解我的问题。
由于
答案 0 :(得分:2)
在foreach (NewsFlash item in newsfl)
行中,您为item
中的每个条目提供了一个名为newsfl
的引用。这不会创建项目的副本,只是对列表中项目的引用。
这样,如果您更新item
上的值,newfl
中的条目也会更新。
答案 1 :(得分:2)
item
中的每个foreach
只是对newsfl
内特定索引处的项目的引用 - 所以当你的循环完成后,你已经更新了所有{{1}在列表中,这些项目挂起了这些更改。这是有道理的,因为每个项目都不是原始文件的副本,是原文。
所以,想象item
和item
作为同一个房间的两扇门,你最终会在同一个地方 - 如果我开始移动家具,我到达哪个门并不重要周围,任何通过任何一个门进来的人都会感动。
另一方面,如果没有发生,那么您期望发生什么?由于您对newsfl[n]
进行了更改,您确定希望保留这些内容吗?
答案 2 :(得分:0)
为什么不改变它? foreach循环中的对象“item”与“newsfl”列表中的对象完全相同。实际上,对象“item”仅指向列表中的正确对象。