現在,我知道這可能是一個新手問題,但我總是把這個問題搞砸了。列表中的對象關係?
我有一個包含一堆對象的列表,但後來在我的代碼中查詢列表以使用LINQ修改其中一個對象。
這樣做是否會更新列表中的對象,或者我將不得不從列表中刪除對象的舊實例,然後將我拔出的對象放回到列表中以確保已更改的值已存儲在列表中?該清單只是一個簡單的List<MyObject>
。
現在,我知道這可能是一個新手問題,但我總是把這個問題搞砸了。列表中的對象關係?
我有一個包含一堆對象的列表,但後來在我的代碼中查詢列表以使用LINQ修改其中一個對象。
這樣做是否會更新列表中的對象,或者我將不得不從列表中刪除對象的舊實例,然後將我拔出的對象放回到列表中以確保已更改的值已存儲在列表中?該清單只是一個簡單的List<MyObject>
。
重要的是要記住的是,名單不包含對象。它包含參考文獻到對象。所以,如果你這樣做:
List<Foo> foos = GetListOfFooFromSomewhere();
Foo foo = foos[0];
foo.Name = "Some other name";
,只有一個Foo
參與對象 - 但無論是列表和局部變量有相同的對象的引用。對象的更改不需要「傳播」到列表中,因爲該列表首先沒有該數據。
我有時候用的一個比喻是:如果我給兩個人我的家庭住址寫在紙上,其中一個人把我的前門塗成紅色,那麼如果另一個人去我家,他們會看到一個紅色的前門。這些紙是不同的,但它們不包含「我的房子」 - 它們只包含到我家的。只有一個房子。
(這是假設Foo
是一個類,如果你有一個可變結構列表,那麼這個列表實際上包含的是直接的數據,而不是引用,我個人會避免使用可變結構來開始。
.NET的內置列表包含對元素的引用。
因此,如果你說:
var mySomething = myList[3];
然後
mySomething.Value = 19;
,然後你會看到
myList[3].Value == 19
非常感謝:) ..總是混合起來:) – Inx 2012-02-02 13:32:59