3 回答

TA貢獻1880條經驗 獲得超4個贊
約翰已經評論了錯誤代碼:
List<string> huh = new List<string>();
huh = wordlist;
在這里您創建一個新列表,然后將其丟棄并將您的參考附加huh到您的舊列表中,因此 huh 和 wordlist 都指的是同一件事..
我只是想指出復制列表的非 LINQ 方式:
List<string> huh = new List<string>(wordlist);
將舊列表傳遞給新列表的構造函數;list 有一個構造函數,它將對象集合存儲在新列表中
您現在有兩個列表,最初它們都引用相同的字符串,但由于字符串無法更改,如果您開始更改列表中的字符串(而不是僅僅將它們從列表中改組或刪除),將創建新的
如果是一個有價值的觀點;您將有 2 個指向相同對象的列表,因此如果您將來有相同的場景,其中的對象可以更改,并且您在一個列表中更改對象,它也會在另一個列表中更改:
//imagine the list stores people, the age of the first
//person in the list is 27, and we increment it
List1[0].PersonAge++;
//list2 is a different list but refers to the same people objects
//this will print 28
Console.Out.WriteLine(list2[0].PersonAge);
這就是我們所說的淺拷貝

TA貢獻1874條經驗 獲得超12個贊
您的問題來自這樣一個事實,即在 C# 中我們有引用類型和值類型。
值類型可以通過直接賦值運算符 ( =
) 進行賦值,但對于引用類型則不同。引用類型本身不存儲實際數據,它們在內存中存儲數據所在的位置。就像指針一樣,如果你來自 C 世界。
看看IClonable
。另請閱讀Jon Skeet 的參數傳遞,它很好地描述了值和引用類型。
- 3 回答
- 0 關注
- 154 瀏覽
添加回答
舉報