似乎没有e.TakeWhile(predicate, atLeastNElements)
重载。有没有方便的方法来表达TakeWhile
,但是如果有>= N
个元素可用,则至少取出N
个元素。
编辑:我脑海中想到的最好方法是在TakeWhile
的谓词中捕获一个整数,并在每次调用时将其减去1,同时返回true
。只有计数器降至0后才使用实际谓词。
TakeWhile
:var e = new [] { 1, 2, 3, 4, 5 };
var n = 3; // at least n
e.TakeWhile((element, index) => index < n || predicate(element));
< 3
(即索引0、1和2),而且你把lambda表达式的参数顺序搞错了 - 应该是(value, index)
- 但是没错,基本上就是这样做。 - Jon Skeet