title: AddRange() and LINQ copying issue
body: <p>I currently have a method which is quite simple and calculates a list of CurveValue (custom object), the issue I have is I need to calculate the parameter and pass a decimal back without actually changing the parameter.</p>
  
  <p>I tried to AddRange() into a new object so the parameter curve would not be affected but it seems the reference still exists and after the ForEach() is performed both curve, and curveA have changed.</p>
  
  <p>I'm assuming it is still referenced but is there an easy way of doing this without enumerating through the parameter curve and adding it to curveA?</p>
  
  <pre><code>public decimal Multiply(List&lt;CurveValue&gt; curve, decimal dVal)
  {
      List&lt;CurveValue&gt; curveA = new List&lt;CurveValue&gt;();
      curveA.AddRange(curve);
  
      curveA.ForEach(a =&gt; a.Value = decimal.Round(a.Value, 4) * dVal);
  
      return Sum(curveA);
  }
  
  public decimal Sum(List&lt;CurveValue&gt; curveA)
  {
      return curveA.Sum(x =&gt; x.Value);
  }
  </code></pre>