日期:2014-05-20  浏览次数:20800 次

ElementAt 的性能问题
有一个linq操作的结果得到 var T ,T是一个double的序列,序列长度是100.

我需要从T中取出 指定位置的3个值,第一个,中间一个,最后一个。

问题是: 我是直接用ElementAt做三次好,还是先转成ToArray()之后用索引访问好?

另外,如果不是3个值,是50个值呢?







------解决方案--------------------
var query=list.Select((l,index)=>new{Key=index,Value=l})
.Where(p=>new int[]{0,49,99}.Contains(p.Key));

------解决方案--------------------
如果你不知道“一个double的序列”到底是哪一种序列,就不要胡乱使用 ElementAt。它只是对IList才使用索引,对于其它的当然是从到尾枚举一次。比如说它是一个一般的linq查询,linq查询是延迟的,那么你写ElementAt三次,其实就会让这个linq查询重复执行三次,反而失去了“延迟”的意义,反而画蛇添足了。