title: How create a new deep copy (clone) of a List<T>?
body: <p>In the following piece of code, </p>
  
  <pre><code>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&lt;Book&gt; books_1 = new List&lt;Book&gt;();
              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&lt;Book&gt; books_2 = new List&lt;Book&gt;(books_1);
  
              books_2[0].title = "Five";
              books_2[1].title = "Six";
  
              textBox1.Text = books_1[0].title;
              textBox2.Text = books_1[1].title;
          }
      }
  
  }
  </code></pre>
  
  <p>I use a <code>Book</code> object type to create a <code>List&lt;T&gt;</code> and I populate it with a few items giving them a unique title (from 'one' to 'five').</p>
  
  <p>Then I create <code>List&lt;Book&gt; books_2 = new List&lt;Book&gt;(books_1)</code>. </p>
  
  <p>From this point, I know it's a clone of the list object, BUT the book objects from <code>book_2</code> are still a reference from the book objects in <code>books_1</code>. It's proven by making changes on the two first elements of <code>books_2</code>, and then checking those same elements of <code>book_1</code> in a <code>TextBox</code>.</p>
  
  <p><code>books_1[0].title and books_2[1].title</code> have indeed been changed to the new values of <code>books_2[0].title and books_2[1].title</code>.</p>
  
  <p><strong>NOW THE QUESTION</strong></p>
  
  <p>How do we create a new hard copy of a <code>List&lt;T&gt;</code>? The idea is that <code>books_1</code> and <code>books_2</code> become completely independent of each other.</p>
  
  <p>I'm disappointed Microsoft didn't offer a neat, fast and easy solution like Ruby are doing with the <code>clone()</code> method.</p>
  
  <p>What would be really awesome from helpers is to use my code and alter it with a workable solution so it can be compiled and work. I think it will truly help newbies trying to understand offered solutions for this issue.</p>
  
  <p>EDIT: Note that the <code>Book</code> class could be more complex and have more properties. I tried to keep things simple.</p>