将循环转换为LINQ

时间:2012-11-05 22:20:53

标签: c# linq list

进行每日退货计算的权益分析(股票)对象列表。 认为必须有成对的解决方案才能做到这一点:

for(int i = 0; i < sdata.Count; i++){
    sdata[i].DailyReturn = (i > 0) ? (sdata[i-1].AdjClose/sdata[i].AdjClose) - 1
                                   : 0.0;
}

2 个答案:

答案 0 :(得分:2)

LINQ 代表:“语言集成查询

不应该使用LINQ,并且几乎不能用于赋值,LINQ不会更改给定的IEnumerable参数,但会创建一个新参数。

正如下面的评论所示,有一种方法可以使用LINQ创建一个新的IEnumerable ,它会更慢,而且可读性更低。

虽然LINQ很好,但重要的是知道何时不使用它。

只需使用旧的 for loop

答案 1 :(得分:0)

我是LINQ的新手,我开始使用它因为stackoverflow所以我试着玩你的问题,我知道这可能会吸引downvotes但是我尝试过,它会做你想要的,以防至少有一个元素在列表中。

sdata[0].DailyReturn = 0.0;
sdata.GetRange(1, sdata.Count - 1).ForEach(c => c.DailyReturn = (sdata[sdata.IndexOf(c)-1].AdjClose / c.AdjClose) - 1);

但必须说避免循环不是最好的做法。从我的角度来看,LINQ应该在方便的地方使用,而不是随处可见。好的旧循环有时更容易维护。