public SpanOfYears YearsIntervalForPeriod(MonthPeriod period)
        {
            SpanOfYears[] validSpan = Milestones.Where((x) => SeqOfYears.SelectForPeriod(x, period)).ToArray();
            SpanOfYears   firstSpan = validSpan.FirstOrDefault();

            return(firstSpan == null?SpanOfYears.Empty() : firstSpan);
        }
        private static SpanOfYears TransformYearsToSpans(UInt16 yearFrom, UInt16 yearUpto)
        {
            UInt16 tranUpto = SeqOfYears.TransformZeroToUpto(yearUpto);
            UInt16 spanUpto = (tranUpto == yearFrom ? tranUpto : (UInt16)(tranUpto - 1u));

            return(new SpanOfYears(yearFrom, spanUpto));
        }
        public SeqOfYears(UInt16[] years)
        {
            UInt16[] sortedYears = years.OrderBy((x) => SeqOfYears.TransformZeroToUpto(x)).ToArray();
            int      beginsCount = sortedYears.Length - 1;

            UInt16[]   beginsYears = sortedYears.Take(beginsCount).ToArray();
            UInt16[]   finishYears = sortedYears.Skip(1).ToArray();
            UInt16[][] sortedZiped = beginsYears.Zip(finishYears, (x, y) => new UInt16[] { x, y }).ToArray();
            this.Milestones = sortedZiped.Select((x) => SeqOfYears.TransformYearsToSpans(x.First(), x.Last())).ToArray();
        }