2011-11-03 21 views
2

我想说我的代码正常工作,但我不知道它为什么这样工作。所以要清楚,这里是我的代码:循环列表并调整它

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时,那么列表newsfl中的属性dtDate也会更改。这是我想要的,但是我认为它有点奇怪,因为在foreach循环中的item与列表newsfl无关?

希望你能理解我的问题。

感谢

回答

2

每个在foreachitem只是在中newsfl特定索引项参考 - 在列表中,所以当你的循环完成后,你已经更新了所有item的,并且这些项目挂到这些变化。这是有道理的,因为每个项目不是原件的副本,它的原始

所以,想象一下itemnewsfl[n]作为同一个房间的两扇门,你最终会在同一个地方 - 并且无论我通过哪个门到达,如果我开始移动家具,它也会移动任何人通过任何一个门进入。

另一方面,如果这没有发生,那么你会发生什么?由于您对item进行了更改,因此您确定想让保留它们吗?

+0

我正在测试这个。我想要创建另一个列表并添加循环中新创建列表中的所有项目。但我不知道这个功能,所以它现在变得更容易了。谢谢 – Ozkan

2

foreach (NewsFlash item in newsfl)你把一个基准线,叫item,给每个条目的newsfl。这不会创建项目的副本,只是对列表中项目的引用。

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

+0

感谢您的回复。这是它 – Ozkan

0

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