2011-11-03 40 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」只指向列表中的正確對象。