首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AddRange()和LINQ复制问题

AddRange()和LINQ复制问题
EN

Stack Overflow用户
提问于 2012-01-11 22:03:28
回答 3查看 1.2K关注 0票数 5

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

我尝试将AddRange()放入一个新对象中,这样参数曲线就不会受到影响,但是这个引用似乎仍然存在,并且在执行ForEach()之后,曲线和curveA都发生了变化。

我假设它仍然被引用,但是有没有一种简单的方法可以做到这一点,而不是枚举参数曲线并将其添加到curveA中?

代码语言:javascript
复制
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);
}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-11 22:06:56

您可以像这样使用the Sum method

代码语言:javascript
复制
public decimal Multiply(IEnumerable<CurveValue> curve, decimal dVal)
{
    return curve.Sum(a => decimal.Round(a.Value, 4) * dVal);
}

更新

提供了另一个传递到现有Sum方法的实现:

代码语言:javascript
复制
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);
}
票数 6
EN

Stack Overflow用户

发布于 2012-01-11 22:13:53

当您使用列表集合时,您可以使用Select扩展方法。此方法提供一个参数,您可以在其中为列表中的每个元素定义一个转换函数,并返回一个IEnumerable,其中T是您在函数上指定的类型。

希望它能有所帮助:)

票数 3
EN

Stack Overflow用户

发布于 2012-01-11 22:26:44

这可能有点老套,但你为什么要复制这个范围呢?

您只需迭代曲线,并将计算出的值放入结果列表中,然后将这些值相加。

代码语言:javascript
复制
List<CurveValue> curveA = new List<CurveValue>();        
curve.ForEach(a => curveA.Add(new CurveValue {Value = decimal.Round(a.Value, 4) * dVal });          

return Sum(curveA); 

很抱歉没有检查代码,我在上网本上。我希望你明白我的意思。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8820574

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档