循环列表并进行调整

时间:2011-11-03 09:47:33

标签: 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也会发生变化。这就是我想要的,但我认为这有点奇怪,因为foreach循环中的item与列表newsfl无关?

希望你理解我的问题。

由于

3 个答案:

答案 0 :(得分:2)

foreach (NewsFlash item in newsfl)行中,您为item中的每个条目提供了一个名为newsfl的引用。这不会创建项目的副本,只是对列表中项目的引用。

这样,如果您更新item上的值,newfl中的条目也会更新。

答案 1 :(得分:2)

item中的每个foreach只是对newsfl内特定索引处的项目的引用 - 所以当你的循环完成后,你已经更新了所有{{1}在列表中,这些项目挂起了这些更改。这是有道理的,因为每个项目都不是原始文件的副本,原文。

所以,想象itemitem作为同一个房间的两扇门,你最终会在同一个地方 - 如果我开始移动家具,我到达哪个门并不重要周围,​​任何通过任何一个门进来的人都会感动。

另一方面,如果没有发生,那么您期望发生什么?由于您对newsfl[n]进行了更改,您确定希望保留这些内容吗?

答案 2 :(得分:0)

为什么不改变它? foreach循环中的对象“item”与“newsfl”列表中的对象完全相同。实际上,对象“item”仅指向列表中的正确对象。