假设我有一个序列。
IEnumerable<int> sequence = GetSequenceFromExpensiveSource();
// sequence now contains: 0,1,2,3,...,999999,1000000
获取这个序列是不廉价的,而且是动态生成的,我只想遍历一次。
我想要获取0-999999(即除最后一个元素外的所有元素)。
我知道我可以像这样做:
sequence.Take(sequence.Count() - 1);
但这会导致对大序列进行两次枚举。
是否有 LINQ 构造可让我执行:
sequence.TakeAllButTheLastElement();
sequenceList.RemoveAt(sequence.Count - 1);
来进行缓存。在我的情况下,这是可以接受的,因为在所有LINQ操作之后,我必须将其转换为数组或IReadOnlyCollection
。我想知道你的使用情况,在那里你甚至不考虑缓存?正如我所看到的,即使是批准的答案也会进行一些缓存,因此在我看来,简单地转换为List
更容易和更短。 - Pavels Ahmadulins