Merge some or all of the operators from Stephen Cleary:
Operators for IEnumerable<T> lifted from List<T>/Array:
int IndexOf<T>(this IEnumerable<T> source, T value)
int IndexOf<T>(this IEnumerable<T> source, Func<T, bool> predicate) //
List<T>.FindIndex
int LastIndexOf<T>(this IEnumerable<T> source, T value)
int LastIndexOf<T>(this IEnumerable<T> source, Func<T, bool>
predicate) // List<T>.FindLastIndex
Operators for IList<T> lifted from List<T>/Array:
IList<T> AsReadOnly<T>(this IList<T> list)
void CopyTo<T>(this IList<T> list, int index, IList<T> destination, int
destinationIndex, int count)
void CopyTo<T>(this IList<T> list, IList<T> destination, int
destinationIndex)
void CopyTo<T>(this IList<T> list, IList<T> destination)
int LastIndexOf<T>(this IList<T> list, T value)
int LastIndexOf<T>(this IList<T> list, Func<T, bool> predicate) //
List<T>.FindLastIndex
Operators optimized for IList<T> from Enumerable (.NET 3.5):
IList<TResult> Select<TSource, TResult>(this IList<TSource> list,
Func<TSource, TResult> selector)
IList<TResult> Select<TSource, TResult>(this IList<TSource> list,
Func<TSource, int, TResult> selector)
IList<T> Skip<T>(this IList<T> list, int offset)
IList<T> Take<T>(this IList<T> list, int count)
IList<T> Reverse<T>(this IList<T> list)
T Last(this IList<T> list, Func<T, bool> selector)
T LastOrDefault(this IList<T> list, Func<T, bool> selector)
Operators optimized for IList<T> from EnumerableEx (Rx):
IList<T> Repeat<T>(this IList<T> list, int count)
IList<TResult> Zip<TFirst, TSecond, TResult>(this IList<TFirst> first,
IList<TSecond> second, Func<TFirst, TSecond, TResult> zipper)
IList<T> Memoize<T>(this IList<T> list)
IList<T> MemoizeAll<T>(this IList<T> list)
Sources optimized for IList<T> from EnumerableEx (Rx):
IList<T> Return<T>(T source)
IList<T> Repeat<T>(T source, int count)
IList<T> Concat<T>(params IList<T>[] others)
IList<T> Concat<T>(IList<IList<T>> lists)
IList<T> Generate<T>(int count, Func<T> generator)
IList<T> Generate<T>(int count, Func<int, T> generator)
My own sequence/list operators:
Zip (3-argument version):
IEnumerable<TResult> Zip<TFirst, TSecond, TThird, TResult>(this
IEnumerable<TFirst> first, IEnumerable<TSecond> second,
IEnumerable<TThird> third, Func<TFirst, TSecond, TThird, TResult> zipper)
IList<TResult> Zip<TFirst, TSecond, TThird, TResult>(this IList<TFirst>
first, IList<TSecond> second, IList<TThird> third, Func<TFirst, TSecond,
TThird, TResult> zipper)
Flatten:
IEnumerable<T> Flatten<T>(this IEnumerable<IEnumerable<T>> list)
IList<T> FlattenList<T>(this IList<IList<T>> list)
Select (bidirectional projection):
IList<TResult> Select<TSource, TResult>(this IList<TSource> list,
Func<TSource, TResult> selector, Func<TResult, TSource> reverseSelector)
Slice:
IList<T> Slice<T>(this IList<T> list, int offset, int count)
IList<T> Step<T>(this IList<T> list, int step)
CopyBackward:
void CopyBackward<T>(this IList<T> list, int index, IList<T>
destination, int destinationIndex, int count)