示例#1
0
        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));
        }
示例#2
0
        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));
        }
示例#3
0
        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));
        }
示例#4
0
 public IPartition <TResult> Skip(int count)
 {
     Debug.Assert(count > 0);
     return(new SelectIPartitionIterator <TSource, TResult>(_source.Skip(count), _selector));
 }
示例#5
0
 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));
 }
示例#6
0
 public IPartition <TResult> Skip(int count)
 {
     return(count == 0 ? (IPartition <TResult>)Clone() : new SelectIPartitionIterator <TSource, TResult>(_source.Skip(count), _selector));
 }