Как создать новую глубокую копию (клон) списка <T>?
В следующем фрагменте кода
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 books_1 = new List();
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 books_2 = new List(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
и я заполняю его несколькими элементами, присваивая им уникальное название (изодин' к5').
Тогда я создаю.List books_2 = new List(books_1)
С этого момента я это знаюявляется клоном объекта списка, НО объекты книги изbook_2
до сих пор ссылки на объекты книги вbooks_1
, Это'подтверждается внесением изменений в два первых элементаbooks_2
, а затем проверять те же элементыbook_1
в .TextBox
books_1[0].title and books_2[1].title
действительно были изменены на новые значения.books_2[0].title and books_2[1].title
СЕЙЧАС ВОПРОС
Как мы создаем новую печатную копиюList
? Идея в том, чтоbooks_1
а такжеbooks_2
стать полностью независимыми друг от друга.
Я разочарован Microsoft не сделалне предлагает аккуратного, быстрого и простого решения, которое Ruby делает сclone()
метод.
Что было бы действительно здорово от помощников, так это использовать мой код и изменить его с помощью работоспособного решения, чтобы он мог быть скомпилирован и работать. Я думаю, что это действительно поможет новичкам, пытающимся понять предлагаемые решения для этой проблемы.
РЕДАКТИРОВАТЬ: Обратите внимание, чтоBook
класс может быть более сложным и иметь больше свойств. Я пытался сделать вещи простыми.