在下面的一段代码中,
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Windows.Forms;
namespace clone_test_01
{
public partial class MainForm : Form
{
public class Book
{
public string title = "";
public Book(string title)
{
this.title = title;
}
}
public MainForm()
{
InitializeComponent();
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";
textBox1.Text = books_1[0].title;
textBox2.Text = books_1[1].title;
}
}
}
我使用一个Book
对象类型来创建一个List<T>
,并用一些项目填充它,给它们一个唯一的标题(从“一”到“五”)。
然后我创建List<Book> books_2 = new List<Book>(books_1)
.
从这一点来看,我知道它是 list 对象的克隆,但是来自book_2
的 book 对象仍然是来自 book 对象的引用books_1
。通过对 的前两个元素进行更改books_2
,然后检查 a 中的相同元素来book_1
证明这一点TextBox
。
books_1[0].title and books_2[1].title
确实已更改为 的新值books_2[0].title and books_2[1].title
。
现在的问题
我们如何创建一个新的硬拷贝List<T>
?这个想法是,books_1
并且books_2
变得完全独立于彼此。
我很失望微软没有像 Ruby 那样提供简洁、快速和简单的解决方案clone()
。
帮助者真正令人敬畏的是使用我的代码并使用可行的解决方案对其进行更改,以便可以编译和工作。我认为这将真正帮助新手了解为这个问题提供的解决方案。
编辑:请注意,Book
该类可能更复杂并具有更多属性。我试图让事情变得简单。