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

如何创建 C# 列表的真正深层副本?

Patricia Arquette
发布: 2025-01-11 18:47:43
原创
217 人浏览过

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

创建List的真正深拷贝方法

引言

在许多编程场景中,创建与原始数据结构真正独立的副本至关重要。对于C#中的List,理解如何实现深拷贝至关重要。

问题

考虑以下代码片段:

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;
登录后复制

虽然此代码创建了一个新的列表,但books_2中的Book对象仍然是books_1中相同对象的引用。因此,对books_2的修改会影响books_1。

解决方案

要创建List的真正深拷贝,必须复制原始列表的每个元素。这可以使用以下代码实现:

List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();
登录后复制

通过使用LINQ的Select方法,books_1中的每个Book对象都转换为一个新的Book对象。然后,这些新对象存储在books_2中,从而产生一个深拷贝。

或者,可以使用List的ConvertAll方法采用更简单的方法:

List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));
登录后复制

此方法返回一个新列表,其中每个元素都是转换原始列表中相应元素的结果。

通过这种方法,books_2和books_1彼此独立,对一个列表的更改不会影响另一个列表。

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

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