title: How to copy List without affecting first List
body: <p>I try copy a list, but when I change the second list, the first list is changed with the second list.</p>
  
  <p>My model class:</p>
  
  <pre><code>public class urunler : ICloneable
  {
  public int id { get; set; }
  public string icerik { get; set; }
  }
  </code></pre>
  
  <p>Extensions class:</p>
  
  <pre><code>using System.Collections.Generic;
  using System;
  using System.Linq;
  
  namespace Extensions
  {
      public static class Extensions {
  
          public static IList&lt;T&gt; Clone&lt;T&gt;(this IList&lt;T&gt; SourceList) where T: ICloneable
          {
              return SourceList.Select(item =&gt; (T)item.Clone()).ToList();
          }
      }
  }
  </code></pre>
  
  <p>BLL class:</p>
  
  <pre><code>using System.Linq;
  using Extensions;
  public class bll
  {
      public void examp
      {
          List&lt;urunler&gt; L1 = new List&lt;urunler&gt;();
          urunler U = new urunler();
          U.icerik="old";
          L1.Add(U);
          List&lt;urunler&gt; L2 = L1.Clone();
          L2[0].icerik="new";
          MessageBox.show(L1[0].icerik);
          MessageBox.show(L2[0].icerik);
          //
      }
  }
  </code></pre>
  
  <p>Error:</p>
  
  <pre><code>error CS0535: `urunler' does not implement interface member `System.ICloneable.Clone()'
  </code></pre>
  
  <p>And then I try change model class:</p>
  
  <pre><code>public class urunler : ICloneable
  {
      #region ICloneable implementation
  
      IList&lt;urunler&gt; ICloneable.Clone()
      {
          throw new NotImplementedException ();
      }
  
      #endregion
      public int id { get; set; }
      public string icerik { get; set; }
  }
  </code></pre>
  
  <p>error:</p>
  
  <pre><code>error CS0539: `System.ICloneable.Clone' in explicit interface declaration is not a member of interface
  </code></pre>
  
  <p>It works this time, I changed my model class</p>
  
  <pre><code>public class urunler : ICloneable
  {
      public object Clone()         
      {             
          return this.MemberwiseClone();         
      }
      public int id { get; set; }
      public string icerik { get; set; }
  }
  </code></pre>
  
  <p>And changed my bll class:</p>
  
  <pre><code>//before:
  //List&lt;urunler&gt; L2 = L1.Clone();
  //after:
  List&lt;urunler&gt; L2 = L1.Clone().toList();
  </code></pre>