/// <summary>
        /// Parses the tenor string into a <see cref="Period.Tenor"/> instance.
        /// </summary>
        /// <param name="tenor">The input non empty string segment.</param>
        /// <param name="result">The result <see cref="Period.Tenor"/> instance. </param>
        /// <returns>True if it is parsed with success.</returns>
        public static bool TryParse(ref TenorSegment tenor, out Period.Tenor result)
        {
            result = default(Period.Tenor);

            if (!tenor.HasValue || tenor.Length == 0)
            {
                return(false);
            }

            int?years    = null;
            int?weeks    = null;
            int?months   = null;
            int?days     = null;
            var flatList = tenor.Split(Separators);

            foreach (var item in flatList)
            {
                if (TryParse(item.Item1, out int number))
                {
                    switch (item.Item2)
                    {
                    case PatternDay:
                    case PatternDayUp:
                        if (days.HasValue)
                        {
                            return(false);
                        }
                        days = number;
                        break;

                    case PatternWeek:
                    case PatternWeekUp:
                        if (weeks.HasValue)
                        {
                            return(false);
                        }
                        weeks = number;
                        break;

                    case PatternMonth:
                    case PatternMonthUp:
                        if (months.HasValue)
                        {
                            return(false);
                        }
                        months = number;
                        break;

                    case PatternYear:
                    case PatternYearUp:
                        if (years.HasValue)
                        {
                            return(false);
                        }
                        years = number;
                        break;

                    default:
                        return(false);
                    }
                }
                else
                {
                    return(false);
                }
            }

            result = new Period.Tenor(years ?? 0, months ?? 0, weeks ?? 0, days ?? 0);
            return(true);
        }
        /// <summary>
        /// Parses the tenor string into a <see cref="Period.Tenor"/> instance.
        /// </summary>
        /// <param name="tenor">The input non empty string</param>
        /// <param name="result">The result <see cref="Period.Tenor"/> instance. </param>
        /// <returns>True if it is parsed with success.</returns>
        public static bool TryParse(string tenor, out Period.Tenor result)
        {
            var wrapper = new TenorSegment(tenor);

            return(TryParse(ref wrapper, out result));
        }