public SeriesEnumerator(SeriesIterator <T> seriesIterator)
        {
            this.BaseSeries   = seriesIterator.BaseSeries;
            this.IterationSet = seriesIterator.IterationSet;

            this.maskEnumerator = new SeriesMaskEnumerator(seriesIterator.BaseSeries.Length, seriesIterator.Depth);
            maskEnumerator.MoveNext();
            BaseSeriesElements         = BaseSeries.Select(x => new[] { x }).ToArray();
            jaggedElements             = (T[][])BaseSeriesElements.Clone();
            this.jaggedArray           = new EnumerableJaggedArray <T>(jaggedElements);
            this.jaggedArrayEnumerator = jaggedArray.GetEnumerator();
        }
        public bool MoveNext()
        {
            bool result = jaggedArrayEnumerator.MoveNext();

            if (!result)
            {
                result = maskEnumerator.MoveNext();
                if (result)
                {
                    if (jaggedElements.Length != maskEnumerator.Current.Length)
                    {
                        jaggedElements = maskEnumerator.Current.Select(x => new T[] { }).ToArray();
                    }
                    //var jaggedElements = new List<T[]>();
                    int baseIndex = 0;
                    for (var i = 0; i < maskEnumerator.Current.Length; i++)
                    {
                        if (maskEnumerator.Current[i])
                        {
                            //jaggedElements.Add(BaseSeriesElements[baseIndex++]);
                            jaggedElements[i] = BaseSeriesElements[baseIndex++];
                        }
                        else
                        {
                            //jaggedElements.Add((T[])IterationSet.Clone());
                            jaggedElements[i] = (T[])IterationSet.Clone();
                        }
                    }
                    this.jaggedArray           = new EnumerableJaggedArray <T>(jaggedElements.ToArray());
                    this.jaggedArrayEnumerator = jaggedArray.GetEnumerator();
                    result = jaggedArrayEnumerator.MoveNext();
                }
            }

            return(result);
        }