Im folgenden Stück Code,Wie erstellen Sie eine neue tiefe Kopie (Klon) einer Liste <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<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;
}
}
}
Ich benutze ein Book
Objekttyp ein List<T>
und ich füllen Sie es mit ein paar Elemente, um sie einen einzigartigen Titel (von ‚Eins‘ bis ‚fünf‘), was zu schaffen.
Dann erstelle ich List<Book> books_2 = new List<Book>(books_1)
.
Von diesem Punkt weiß ich, dass es ein Klon des Listenobjekts ist, ABER die Buchobjekte von book_2
sind immer noch eine Referenz von den Buchobjekten in books_1
. Es wurde bewiesen, indem Änderungen an den zwei ersten Elementen von books_2
vorgenommen wurden und dann dieselben Elemente von book_1
in einer TextBox
überprüft wurden.
books_1[0].title and books_2[1].title
wurden tatsächlich auf die neuen Werte von books_2[0].title and books_2[1].title
geändert.
nun die Frage
Wie schaffen wir eine neue Fest Kopie eines List<T>
? Die Idee ist, dass books_1
und books_2
völlig unabhängig voneinander werden.
Ich bin enttäuscht, Microsoft bot keine ordentliche, schnelle und einfache Lösung wie Ruby mit der clone()
Methode.
Was von den Helfern wirklich fantastisch ist, meinen Code zu verwenden und ihn mit einer praktikablen Lösung zu ändern, damit er kompiliert werden und arbeiten kann. Ich denke, es wird wirklich Neulingen helfen, die angebotenen Lösungen für dieses Problem zu verstehen.
BEARBEITEN: Beachten Sie, dass die Klasse Book
komplexer sein und mehr Eigenschaften haben kann. Ich habe versucht, die Dinge einfach zu halten.
So etwas wie 'CopyTo'? –
Diese Art des Kopierens wird normalerweise [deep copy] (http: //en.wikipedia.org/wiki/Deep_copy # Deep_copy). Wenn Sie glauben, dass "Hardcopy" etwas anderes ist, das Sie in Ihrem Fall wirklich benötigen, bitte machen Sie meine Bearbeitung rückgängig und fügen Sie Ihre Definition des Begriffs hinzu. –
A [Hardcopy] (http://en.wikipedia.org/wiki/Hard_copy) bedeutet, dass Sie es auf ein Blatt Papier drucken. –