Jak utworzyć nową głęboką kopię (klon) listy <T>?

W następującym fragmencie kodu,

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;
        }
    }

}

Używam aBook typ obiektu, aby utworzyćList<T> i zapełniam go kilkoma elementami nadającymi im unikalny tytuł (od „jeden” do „pięć”).

Potem tworzęList<Book> books_2 = new List<Book>(books_1).

Od tego momentu wiem, że to klon obiektu listy, ALE obiekty książki zbook_2 są nadal odniesieniem z obiektów książki wbooks_1. Udowodniono to poprzez wprowadzanie zmian w dwóch pierwszych elementachbooks_2, a następnie sprawdzanie tych samych elementówbook_1 wTextBox.

books_1[0].title and books_2[1].title zostały rzeczywiście zmienione na nowe wartościbooks_2[0].title and books_2[1].title.

TERAZ PYTANIE

Jak stworzyć nową wersję papierową aList<T>? Chodzi o tobooks_1 ibooks_2 stać się całkowicie niezależni od siebie.

Jestem zawiedziony, że Microsoft nie zaoferował prostego, szybkiego i łatwego rozwiązania, takiego jak Rubyclone() metoda.

To, co byłoby naprawdę niesamowite od pomocników, to używanie mojego kodu i zmienianie go za pomocą praktycznego rozwiązania, aby można było go skompilować i działać. Myślę, że to naprawdę pomoże nowicjuszom próbującym zrozumieć oferowane rozwiązania tego problemu.

EDYCJA: Zauważ, żeBook klasa może być bardziej złożona i mieć więcej właściwości. Starałem się zachować prostotę.

questionAnswers(8)

yourAnswerToTheQuestion