2011-11-03 12 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とは関係がないので、私は思っています。

私の質問を理解していただきたいと思います。

おかげであなたはnewsflの各エントリにitemと呼ばれる参照を、取るforeach (NewsFlash item in newsfl)ラインで

答えて

2

foreachの各itemnewsfl内の特定のインデックス位置にあるアイテムまでちょうど参照である - あなたのループが実行されるときに、リスト内のすべてのitem年代を更新しました、そしてそれらの項目は、これらの変更にハングアップします。各商品はオリジナルのコピーではないので、意味があります。オリジナルです。

itemnewsfl[n]を同じ部屋の2つの扉として想像してみましょう。あなたは同じ場所にあります。そして、どのドアが到着しても問題ありません。いずれかのドアから入る人。

このになっていない場合、あなたは何が起こると思いますか? itemに変更を加えたので、確かににはが必要ですか?

+0

私はこれをテストしていました。私は別のリストを作成して、その新しく作成されたリスト内のすべてのアイテムをループ内に追加することを念頭に置いていました。しかし、私はこの機能を知らなかったので、それは今より簡単になりました。ありがとう – Ozkan

2

。これは、アイテムのコピーを作成せず、リスト内のアイテムへの参照のみを作成します。

このように、itemの値を更新すると、newflのエントリも更新されます。

+0

ご返信ありがとうございます。これはそれです – Ozkan

0

なぜ変更しないでください。 foreachループのオブジェクト "item"は、 "newsfl"リストのオブジェクトとまったく同じオブジェクトです。実際には、オブジェクト「アイテム」はリスト内の正しいオブジェクトのみを指し示します。

関連する問題