创建List
引言
在许多编程场景中,创建与原始数据结构真正独立的副本至关重要。对于C#中的List
问题
考虑以下代码片段:
<code class="language-csharp">List<Book> books_1 = new List<Book>(); books_1.Add(new Book("One")); books_1.Add(new Book("Two")); books_1.Add(new Book("Three")); books_1.Add(new Book("Four")); List<Book> books_2 = new List<Book>(books_1); books_2[0].title = "Five"; books_2[1].title = "Six"; // 对books_2的更改会反映在books_1中 textBox1.Text = books_1[0].title; textBox2.Text = books_1[1].title;</code>
虽然此代码创建了一个新的列表,但books_2中的Book对象仍然是books_1中相同对象的引用。因此,对books_2的修改会影响books_1。
解决方案
要创建List
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
通过使用LINQ的Select方法,books_1中的每个Book对象都转换为一个新的Book对象。然后,这些新对象存储在books_2中,从而产生一个深拷贝。
或者,可以使用List
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
此方法返回一个新列表,其中每个元素都是转换原始列表中相应元素的结果。
通过这种方法,books_2和books_1彼此独立,对一个列表的更改不会影响另一个列表。
以上是如何创建 C# 列表的真正深层副本?的详细内容。更多信息请关注PHP中文网其他相关文章!