public static void AddToChunks(this Series series, List <double> values, int chunkSize) { if (values.Count > chunkSize) { throw new ArgumentException(nameof(values)); } if (values.Count == 0) { return; } if (series.Chunks.Count == 0 || series.Chunks.Last().Chunk.Count == chunkSize) { series.AddChunk(new ValuesChunk { Chunk = values }); return; } var missing = chunkSize - series.Chunks.Last().Chunk.Count; if (values.Count <= missing) { series.Chunks.Last().Chunk.AddRange(values); } else { series.Chunks.Last().Chunk.AddRange(values.Take(missing)); series.AddChunk(new ValuesChunk { Chunk = values.Skip(missing).ToList() }); } }