public static TSource First <TSource>(this IEnumerable <TSource> source, Func <TSource, bool> predicate) { if (source == null) { throw Error.ArgumentNull("source"); } if (predicate == null) { throw Error.ArgumentNull("predicate"); } OrderedEnumerable <TSource> ordered = source as OrderedEnumerable <TSource>; if (ordered != null) { return(ordered.First(predicate)); } foreach (TSource element in source) { if (predicate(element)) { return(element); } } throw Error.NoMatch(); }
internal static TSource TryGetFirst <TSource>(this IEnumerable <TSource> source, Func <TSource, bool> predicate, out bool found) { if (source == null) { throw Error.ArgumentNull(nameof(source)); } if (predicate == null) { throw Error.ArgumentNull(nameof(predicate)); } OrderedEnumerable <TSource> ordered = source as OrderedEnumerable <TSource>; if (ordered != null) { return(ordered.TryGetFirst(predicate, out found)); } foreach (TSource element in source) { if (predicate(element)) { found = true; return(element); } } found = false; return(default(TSource)); }
IOrderedEnumerable <TElement> IOrderedEnumerable <TElement> .CreateOrderedEnumerable <TKey>(Func <TElement, TKey> keySelector, IComparer <TKey> comparer, bool descending) { OrderedEnumerable <TElement, TKey> result = new OrderedEnumerable <TElement, TKey>(source, keySelector, comparer, descending); result.parent = this; return(result); }
public static TSource FirstOrDefault <TSource>(this IEnumerable <TSource> source, Func <TSource, bool> predicate) { if (source == null) { throw Error.ArgumentNull(nameof(source)); } if (predicate == null) { throw Error.ArgumentNull(nameof(predicate)); } OrderedEnumerable <TSource> ordered = source as OrderedEnumerable <TSource>; if (ordered != null) { return(ordered.FirstOrDefault(predicate)); } foreach (TSource element in source) { if (predicate(element)) { return(element); } } return(default(TSource)); }
public static TSource Last <TSource>(this IEnumerable <TSource> source, Func <TSource, bool> predicate) { if (source == null) { throw Error.ArgumentNull(nameof(source)); } if (predicate == null) { throw Error.ArgumentNull(nameof(predicate)); } OrderedEnumerable <TSource> ordered = source as OrderedEnumerable <TSource>; if (ordered != null) { return(ordered.Last(predicate)); } IList <TSource> list = source as IList <TSource>; if (list != null) { for (int i = list.Count - 1; i >= 0; --i) { TSource result = list[i]; if (predicate(result)) { return(result); } } } else { using (IEnumerator <TSource> e = source.GetEnumerator()) { while (e.MoveNext()) { TSource result = e.Current; if (predicate(result)) { while (e.MoveNext()) { TSource element = e.Current; if (predicate(element)) { result = element; } } return(result); } } } } throw Error.NoMatch(); }
public static TSource LastOrDefault <TSource>(this IEnumerable <TSource> source, Func <TSource, bool> predicate) { if (source == null) { throw Error.ArgumentNull(nameof(source)); } if (predicate == null) { throw Error.ArgumentNull(nameof(predicate)); } OrderedEnumerable <TSource> ordered = source as OrderedEnumerable <TSource>; if (ordered != null) { return(ordered.LastOrDefault(predicate)); } IList <TSource> list = source as IList <TSource>; if (list != null) { for (int i = list.Count - 1; i >= 0; --i) { TSource element = list[i]; if (predicate(element)) { return(element); } } return(default(TSource)); } else { TSource result = default(TSource); foreach (TSource element in source) { if (predicate(element)) { result = element; } } return(result); } }
internal OrderedEnumerable(IEnumerable <TElement> source, Func <TElement, TKey> keySelector, IComparer <TKey> comparer, bool descending) { if (source == null) { throw Error.ArgumentNull("source"); } if (keySelector == null) { throw Error.ArgumentNull("keySelector"); } base.source = source; this.parent = null; this.keySelector = keySelector; this.comparer = (comparer != null) ? comparer : ((IComparer <TKey>)Comparer <TKey> .Default); this.descending = descending; }
internal OrderedSequence(OrderedEnumerable <TElement> parent, IEnumerable <TElement> source, Func <TElement, TKey> keySelector, IComparer <TKey> comparer, SortDirection direction) : this(source, keySelector, comparer, direction) { this.parent = parent; }
public OrderedPartition(OrderedEnumerable <TElement> source, int minIdxInclusive, int maxIdxInclusive) { _source = source; _minIndexInclusive = minIdxInclusive; _maxIndexInclusive = maxIdxInclusive; }
public OrderedPartition(OrderedEnumerable <TElement> source, int minIdx, int maxIdx) { _source = source; _minIndex = minIdx; _maxIndex = maxIdx; }
internal static TSource TryGetLast <TSource>(this IEnumerable <TSource> source, Func <TSource, bool> predicate, out bool found) { if (source == null) { throw Error.ArgumentNull(nameof(source)); } if (predicate == null) { throw Error.ArgumentNull(nameof(predicate)); } OrderedEnumerable <TSource> ordered = source as OrderedEnumerable <TSource>; if (ordered != null) { return(ordered.TryGetLast(predicate, out found)); } IList <TSource> list = source as IList <TSource>; if (list != null) { for (int i = list.Count - 1; i >= 0; --i) { TSource result = list[i]; if (predicate(result)) { found = true; return(result); } } } else { using (IEnumerator <TSource> e = source.GetEnumerator()) { while (e.MoveNext()) { TSource result = e.Current; if (predicate(result)) { while (e.MoveNext()) { TSource element = e.Current; if (predicate(element)) { result = element; } } found = true; return(result); } } } } found = false; return(default(TSource)); }