比方說,我有一個類ToList() - 它是否創建一個新列表?
public class MyObject
{
public int SimpleInt{get;set;}
}
而且我有一個List<MyObject>
,我ToList()
它,然後改變SimpleInt
之一,我會改變傳播回原來的名單。換句話說,以下方法的輸出是什麼?
public void RunChangeList()
{
var objs = new List<MyObject>(){new MyObject(){SimpleInt=0}};
var whatInt = ChangeToList(objs);
}
public int ChangeToList(List<MyObject> objects)
{
var objectList = objects.ToList();
objectList[0].SimpleInt=5;
return objects[0].SimpleInt;
}
爲什麼?
P/S:如果看起來很明顯,我很抱歉。但我現在沒有與我編譯器...
也要注意,使用結構的一個'List',像一個分配'鏈表類[0] = .SimpleInt 5'將不被允許(C#編譯時錯誤)。這是因爲列表索引器的「get」訪問器的返回值不是變量(它是結構值的返回副本),因此不允許使用賦值表達式設置其成員'.SimpleInt'(它將會發生變化不保存的副本)。那麼,誰使用可變結構呢? – 2016-07-06 16:31:29
@Jeppe Stig Nielson:是的。同樣,編譯器也會阻止你像'foreach(var s in listOfStructs){s.SimpleInt = 42; }'。該_really_討厭的小問題,就是當你試圖像'listOfStructs.ForEach(S => s.SimpleInt = 42)':編譯器允許它和代碼運行沒有異常,但在列表中的結構將保持不變! – LukeH 2016-07-06 17:03:05