在下面的代码片段中,
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>
,并向其中添加一些项目,并为它们赋予唯一的标题(从“one”到“five”)。
然后我创建List<Book> books_2 = new List<Book>(books_1)
。
从这一点上开始,我知道这是列表对象的克隆,但是book_2
中的书籍对象仍然是books_1
中书籍对象的引用。这通过更改books_2
的前两个元素,并在TextBox
中检查相同元素的book_1
得到证明。
books_1[0].title和books_2[1].title
确实已经更改为books_2[0].title和books_2[1].title
的新值。
现在的问题是:
如何创建一个新的List<T>
的硬拷贝?想法是books_1
和books_2
变得完全独立。
我对Microsoft没有像Ruby那样提供clone()
方法的简洁、快速和易于使用的解决方案感到失望。
真正令人敬畏的帮助方式是使用我的代码并将其修改为可工作的解决方案,以便可以编译和运行。我认为这将真正有助于试图理解此问题的新手所提供的解决方案。
编辑:请注意,Book
类可能更复杂,并且具有更多属性。我试图保持简单。
CopyTo
的东西? - K-ballo