Como criar uma nova cópia profunda (clone) de uma List <T>?
No seguinte trecho de código,
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;
}
}
}
Eu uso umBook
tipo de objeto para criar umList<T>
e eu o preencho com alguns itens, dando-lhes um título único (de 'um' a 'cinco').
Então eu crioList<Book> books_2 = new List<Book>(books_1)
.
A partir deste ponto, eu sei que é um clone do objeto de lista, MAS os objetos do livro debook_2
ainda são uma referência dos objetos do livro embooks_1
. Está provado fazendo mudanças nos dois primeiros elementos dobooks_2
e, em seguida, verificar esses mesmos elementos debook_1
em umTextBox
.
books_1[0].title and books_2[1].title
foram realmente alterados para os novos valores debooks_2[0].title and books_2[1].title
.
AGORA A PERGUNTA
Como criamos uma nova cópia impressa de umList<T>
? A ideia é quebooks_1
ebooks_2
tornam-se completamente independentes um do outro.
Estou decepcionado A Microsoft não ofereceu uma solução simples, rápida e fácil como Ruby está fazendo com oclone()
método.
O que seria realmente incrível de ajudantes é usar o meu código e alterá-lo com uma solução viável para que possa ser compilado e trabalhe. Acho que isso realmente ajudará os novatos que estão tentando entender as soluções oferecidas para esse problema.
EDIT: Note que oBook
A classe pode ser mais complexa e ter mais propriedades. Eu tentei manter as coisas simples.