understanding of Array.CopyTo() and Equals()
<p>From the docs, my understanding of the Array.CopyTo() method is - </p>

<ol>
<li>That the method produces a shallow copy of the objects into the destination array.</li>
<li>If the members of the object are a value type then they are copied, and if they are a reference type then the members refeence are copied</li>
</ol>

<p>ICloneable.Clone() also produces a shallow copy.</p>

<p>So take the following code - </p>

<pre><code>void Main()
{
    var a = new A();
    a.MyProperty = new object();
    var listOfA = new List&lt;A&gt;();
    listOfA.Add(a);
    var arrayOfA = new A[1];    
    listOfA.CopyTo(arrayOfA);
    var clonedA = a.Clone();
    listOfA[0].Equals(arrayOfA[0]); //Returns True
    clonedA.Equals(a); //Returns False

}

public class A : ICloneable
{
    public object MyProperty { get; set; }

    public object Clone()
    {
        return this.MemberwiseClone();
    }
}
</code></pre>

<p>Why does the first .Equals() return true ? Should it not be False if it is a shallow copy ?</p>