2

计算每日收益的 Equity Analytics(股票)对象列表。正在考虑必须有一个成对的解决方案来做到这一点:

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

2 回答 2

2

LINQ代表:“语言集成查询

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

正如下面评论中所建议的那样,有一种方法可以使用 LINQ创建一个新的 IEnumerable,它会更慢,而且可读性也会差很多。

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

只需使用旧的 for 循环

于 2012-11-05T22:22:31.993 回答
0

我是 LINQ 的新手,我开始使用它是因为 stackoverflow,所以我尝试解决您的问题,我知道这可能会吸引反对票,但我尝试过并且它可以满足您的要求,以防列表中至少有一个元素.

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

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

于 2012-11-05T22:37:44.907 回答