public SamplerState(ISampleSelector sampler)
        {
            SampleSelectorType = sampler.GetType().Name;
            StratumCode        = sampler.StratumCode;
            SampleGroupCode    = sampler.SampleGroupCode;
            Counter            = sampler.Count;
            InsuranceCounter   = sampler.InsuranceCounter;
            InsuranceIndex     = sampler.InsuranceIndex;

            var samplerName = sampler.GetType().Name;

            switch (samplerName)
            {
            case "SystematicSelecter":
            {
                SystematicIndex = ((SystematicSelecter)sampler).HitIndex;
                break;
            }

            case "BlockSelecter":
            {
                BlockState = ((BlockSelecter)sampler).BlockState;
                break;
            }

            case "ThreePSelecter":
            {
                break;
            }

            case "S3PSelector":
            {
                BlockState = ((S3PSelector)sampler).BlockState;
                break;
            }
            }
        }
        public SamplerState(ISampleSelector sampler)
        {
            if (sampler is null)
            {
                throw new System.ArgumentNullException(nameof(sampler));
            }

            SampleSelectorType = sampler.GetType().Name;
            StratumCode        = sampler.StratumCode;
            SampleGroupCode    = sampler.SampleGroupCode;
            Counter            = sampler.Count;
            InsuranceCounter   = sampler.InsuranceCounter;
            InsuranceIndex     = sampler.InsuranceIndex;

            switch (sampler)
            {
            case SystematicSelecter s:
            {
                SystematicIndex = s.HitIndex;
                break;
            }

            case BlockSelecter b:
            {
                BlockState = b.BlockState;
                break;
            }

            case ThreePSelecter s:
            {
                break;
            }

            case S3PSelector s:
            {
                BlockState = s.BlockState;
                break;
            }
            }
        }