您可以使用Where
超載,其中Func<TSource, int, bool> predicate
作爲輸入。這個委託的第二個輸入是當前元素的索引。所以,這意味着你的lambda表達式必須有兩個輸入,其中第一個將是你的元素的類型,其他的將是Int32
。 Where
方法會自動計算當前元素的索引。
var result = myColl.Where((x, index) => index >= 3 && x.Count > myColl.ElementAt(index - 3).Count);
然後你可以使用你想要的方法Select()
,ToList()
等
P.S:我假定對象的名稱是myColl
。
此外:
我總是喜歡告訴http://referencesource.microsoft.com/
開發商。您可以輕鬆找到所有關於C#源代碼的方法和一切的實現。 如果你感興趣的話,這裏是Where
方法的超載源代碼。
public static IEnumerable<TSource> Where<TSource>(this IEnumerable<TSource> source, Func<TSource, int, bool> predicate) {
if (source == null) throw Error.ArgumentNull("source");
if (predicate == null) throw Error.ArgumentNull("predicate");
return WhereIterator<TSource>(source, predicate);
}
正如你看到的,它將返回WhereIterator
,它會自動計算出當前項目的索引,並將其發送給你的方法:
static IEnumerable<TSource> WhereIterator<TSource>(IEnumerable<TSource> source, Func<TSource, int, bool> predicate) {
int index = -1;
foreach (TSource element in source) {
checked { index++; }
if (predicate(element, index)) yield return element;
}
}
你能澄清你的問題,還是使用不同的措辭?理解你想要的東西非常困難。 –