首页 > 后端开发 > C++ > 如何在 C# 中创建列表的深层副本?

如何在 C# 中创建列表的深层副本?

Patricia Arquette
发布: 2025-01-11 18:36:42
原创
469 人浏览过

How to Create a Deep Copy of a List in C#?

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_2books_1完全独立的深层副本。对任一列表所做的任何更改都不会影响另一个列表。 请记住,这假设您的 Book 类(或列表包含的任何类型)具有合适的构造函数来促进新实例的创建。 如果您的 Book 类具有更多属性,您需要将它们相应地包含在 new Book(...) 构造函数调用中。

以上是如何在 C# 中创建列表的深层副本?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板