Comment créer une nouvelle copie (clone) d'une Liste<T>?

Dans le morceau de code suivant,

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

}

- Je utiliser un Book type d'objet à créer un List<T> et je le remplir avec quelques éléments en leur donnant un titre unique (à partir de 'un' à 'cinq').

Puis-je créer List<Book> books_2 = new List<Book>(books_1).

À partir de ce point, je sais que c'est un clone de l'objet de la liste, MAIS le livre des objets à partir de book_2 sont toujours une référence dans le livre des objets dans books_1. C'est prouvé par faire des modifications sur les deux premiers éléments de books_2, puis de la vérification de ces mêmes éléments de book_1 dans un TextBox.

books_1[0].title and books_2[1].title ont en effet été modifiés pour les nouvelles valeurs de books_2[0].title and books_2[1].title.

MAINTENANT, LA QUESTION

Comment pouvons-nous créer une nouvelle copie papier d'une List<T>? L'idée est que books_1 et books_2 devenir complètement indépendants les uns des autres.

Je suis déçu, Microsoft n'a pas d'offrir un cadre soigné, une solution rapide et simple comme le Rubis sont faites avec le clone() méthode.

Ce serait vraiment génial d'aides est d'utiliser mon code et le modifier avec une solution réalisable de sorte qu'il peut être compilé et le travail. Je pense qu'il va vraiment aider les débutants d'essayer de comprendre les solutions proposées pour ce problème.

EDIT: Notez que le Book classe pourrait être plus complexes et ont plus de propriétés. J'ai essayé de garder les choses simples.

  • Quelque chose comme CopyTo?
  • Ce type de copie est normalement appelé copie. Si vous vous sentez "hard copy" est quelque chose de différent que vous avez réellement besoin dans votre cas, veuillez annuler ma modifier et ajouter votre définition du terme.
  • papier signifie que vous imprimez sur une feuille de papier physique.
  • S'il vous plaît consulter d'autres liées à des questions à propos de deep-copie demandé avant - stackoverflow.com/questions/tagged/...
  • Je voulais dire de copie en profondeur, en effet, désolé, je suis encore débutants.
  • Personnellement, j'aime utiliser une sérialisation & deserialisation routine qui réalise la copie en profondeur - de/sérialisation est lente(ish), mais cela fonctionne n'importe comment beaucoup de propriétés de l'objet. Malheureusement, je suis en vacances, donc je ne peux pas poster le code.
  • Copie en profondeur chaque élément de la liste. Il dépend du contenu de votre liste.
  • OMI profonde clonage est intrinsèquement pas soigné.

InformationsquelleAutor TheScholar | 2012-12-22