public Histogram(IBucket[] buckets, string help, string name, string[] labelNames, string[] labels)
        {
            if (!IsValidName(name))
            {
                throw new ArgumentException($"Invalid metric name: {name}");
            }

            this.name       = name;
            this.help       = help;
            this.labels     = labels;
            this.labelNames = labelNames;
            this.buckets    = buckets.Select(b => new Bucket(b)).ToArray();

            this.maxValues = buckets.Select(b => b.Max).ToArray();
            this.sum       = new AtomicDouble();
        }