私は現在、非常に単純で、CurveValue(カスタムオブジェクト)のリストを計算しています。問題はパラメータを計算し、実際には変更せずに小数点を戻す必要があります。パラメータ。AddRange()とLINQコピーの問題
新しいオブジェクトにAddRange()を実行しようとしましたが、パラメータ曲線には影響しませんが、参照がまだ存在し、ForEach()が実行された後にcurveとcurveAの両方が変更されたようです。
私はそれがまだ参照されていると仮定していますが、パラメータカーブを列挙してcurveAに追加しないと、これを行う簡単な方法がありますか?
public decimal Multiply(List<CurveValue> curve, decimal dVal)
{
List<CurveValue> curveA = new List<CurveValue>();
curveA.AddRange(curve);
curveA.ForEach(a => a.Value = decimal.Round(a.Value, 4) * dVal);
return Sum(curveA);
}
public decimal Sum(List<CurveValue> curveA)
{
return curveA.Sum(x => x.Value);
}
申し訳ありませんが、私のコードを更新しました。 Sumは単なる明らかな方法です。個々のCurveValueオブジェクトを個別に計算し、これらの合計を計算する必要があります。操作側はうまくいきますが、curveAで操作が実行されているときに、なぜカーブが更新されているのか分かりません。 – nik0lias
@ nik0lias CurveAには、カーブ内のまったく同じオブジェクトへの参照が含まれているため、同じオブジェクトを変更しても(curveA.ForEach(...)では)同じオブジェクトを扱います。 –
curveAに曲線をコピーして参照を削除する簡単な方法はありますか?それとも、新しいオブジェクトを列挙して作成し、それをcurveAに追加するケースですか? – nik0lias