我目前有一个非常简单的方法,可以计算一个CurveValue(自定义对象)列表,我遇到的问题是我需要计算参数并在不实际更改参数的情况下将小数点返回。

我尝试将AddRange()放入新对象中,因此不会影响参数曲线,但似乎引用仍然存在,并且在执行ForEach()之后,两个曲线和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);
}

最佳答案

您可以像这样使用the Sum method:

public decimal Multiply(IEnumerable<CurveValue> curve, decimal dVal)
{
    return curve.Sum(a => decimal.Round(a.Value, 4) * dVal);
}

更新

提供另一个传递到现有Sum方法的实现:
public decimal Multiply(IEnumerable<CurveValue> curve, decimal dVal)
{
    IEnumerable<CurveValue> curveA = curve.Select(c => new Curve { Value = decimal.Round(c.Value, 4) * dVal });
    return Sum(curveA);
}

public decimal Sum(IEnumerable<CurveValue> curveA)
{
    return curveA.Sum(x => x.Value);
}

10-08 09:15