进行每日退货计算的权益分析(股票)对象列表。 认为必须有成对的解决方案才能做到这一点:
for(int i = 0; i < sdata.Count; i++){
sdata[i].DailyReturn = (i > 0) ? (sdata[i-1].AdjClose/sdata[i].AdjClose) - 1
: 0.0;
}
答案 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应该在方便的地方使用,而不是随处可见。好的旧循环有时更容易维护。