public static IndexedItem <TSource> FirstIndexedItem <TSource>(this IEnumerable <TSource> source, Func <TSource, bool> predicate) { Assert.IsNotNull(source); Assert.IsNotNull(predicate); var firstIndex = -1; var firstItem = default(TSource); foreach (var item in source) { ++firstIndex; if (predicate(item)) { firstItem = item; break; } } return(IndexedItem.Create(firstIndex, firstItem)); }
public static IndexedItem <TSource> ExtremumIndexedItem <TSource>(this IEnumerable <TSource> source, Func <TSource, TSource, bool> firstArgumentIsExtremum) { Assert.IsNotNull(source); Assert.IsNotNull(firstArgumentIsExtremum); var extremumIndex = -1; var extremumItem = default(TSource); var itemIndex = 0; foreach (var item in source) { if (itemIndex == 0 || firstArgumentIsExtremum(item, extremumItem)) { extremumIndex = itemIndex; extremumItem = item; } ++itemIndex; } return(IndexedItem.Create(extremumIndex, extremumItem)); }