public static IEnumerable <TSource> Skip <TSource>(this IEnumerable <TSource> source, int count) { if (source == null) { throw Error.ArgumentNull(nameof(source)); } if (count < 0) { count = 0; } IPartition <TSource> partition = source as IPartition <TSource>; if (partition != null) { return(partition.Skip(count)); } IList <TSource> sourceList = source as IList <TSource>; if (sourceList != null) { return(new ListPartition <TSource>(sourceList, count, int.MaxValue)); } return(SkipIterator(source, count)); }
public static IEnumerable <TSource> Skip <TSource>(this IEnumerable <TSource> source, int count) { if (source == null) { throw Error.ArgumentNull("source"); } if (count < 0) { count = 0; } IPartition <TSource> partition = source as IPartition <TSource>; if (partition != null) { return(partition.Skip(count)); } IList <TSource> sourceList = source as IList <TSource>; return(sourceList != null?SkipList(sourceList, count) : SkipIterator <TSource>(source, count)); }
public static IEnumerable <TSource> Skip <TSource>(this IEnumerable <TSource> source, int count) { if (source == null) { throw Error.ArgumentNull(nameof(source)); } if (count <= 0) { // Return source if not actually skipping, but only if it's a type from here, to avoid // issues if collections are used as keys or otherwise must not be aliased. if (source is Iterator <TSource> || source is IPartition <TSource> ) { return(source); } count = 0; } else { IPartition <TSource> partition = source as IPartition <TSource>; if (partition != null) { return(partition.Skip(count)); } } IList <TSource> sourceList = source as IList <TSource>; if (sourceList != null) { return(new ListPartition <TSource>(sourceList, count, int.MaxValue)); } return(new EnumerablePartition <TSource>(source, count, -1)); }
public IPartition <TResult> Skip(int count) { Debug.Assert(count > 0); return(new SelectIPartitionIterator <TSource, TResult>(_source.Skip(count), _selector)); }
static IPartition <TSource> TakePartitionRange(IPartition <TSource> partition, int startIndex, int endIndex) { partition = endIndex == 0 ? EmptyPartition <TSource> .Instance : partition.Take(endIndex); return(startIndex == 0 ? partition : partition.Skip(startIndex)); }
public IPartition <TResult> Skip(int count) { return(count == 0 ? (IPartition <TResult>)Clone() : new SelectIPartitionIterator <TSource, TResult>(_source.Skip(count), _selector)); }