C# 中的深度复制列表
直接在 C# 中分配列表(例如 List<T> list2 = list1;
)或使用 List<T> list2 = new List<T>(list1);
创建浅表副本。 对一个列表的修改会影响另一个列表,因为它们共享相同的底层对象。要创建真正的深层复制(其中一个列表的更改独立于另一个列表),您需要复制所包含的对象。方法如下:
方法一:使用LINQ(推荐)
最简洁、最高效的方法是利用 LINQ 的 Select
方法来创建列表中每个对象的新实例:
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
此行迭代 books_1
,使用现有的 Book
为每个元素创建一个新的 title
对象(假设您的 Book
类有一个接受标题的构造函数),然后将结果序列转换回来进入新的List<Book>
。
方法2:使用ConvertAll
(替代)
ConvertAll
方法为相同的结果提供了稍微简单的语法:
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
这实现了与 LINQ 方法相同的深度复制。 选择您认为更具可读性的方法。
这两种方法都确保books_2
是books_1
完全独立的深层副本。对任一列表所做的任何更改都不会影响另一个列表。 请记住,这假设您的 Book
类(或列表包含的任何类型)具有合适的构造函数来促进新实例的创建。 如果您的 Book
类具有更多属性,您需要将它们相应地包含在 new Book(...)
构造函数调用中。
以上是如何在 C# 中创建列表的深层副本?的详细内容。更多信息请关注PHP中文网其他相关文章!