private static IEnumerable <int> GetTargetMonths(IFixedHolidayFunc func)
        {
            var targetMonths = new List <int>();

            if (func.FromDate.HasValue && func.ToDate.HasValue)
            {
                var fromMonth = func.FromDate.Value.Month;
                var toMonth   = func.ToDate.Value.Month;

                if (fromMonth > toMonth)
                {
                    targetMonths.AddRange(Numbers.GetMembersBetween(1, toMonth));
                    targetMonths.AddRange(Numbers.GetMembersBetween(fromMonth, 12));
                }
                else
                {
                    targetMonths.AddRange(Numbers.GetMembersBetween(fromMonth, toMonth));
                }
            }
            else
            {
                targetMonths.Add(func.Month);
            }

            return(targetMonths.Where(x => x >= 1 && x <= 12));
        }
        /// <summary>
        /// Contains<br />
        /// 包含
        /// </summary>
        /// <param name="func">An instance of <see cref="IFixedHolidayFunc"/>.</param>
        /// <returns></returns>
        public bool Contains(IFixedHolidayFunc func)
        {
            if (func == null)
            {
                return(false);
            }

            if (_fixedHolidayFuncs.Any(x => x.I18NIdentityCode == func.I18NIdentityCode))
            {
                return(true);
            }

//            if (_fixedHolidayFuncs.Any(x => x.Name == func.Name && x.Country == func.Country && x.BelongsToCountry == func.BelongsToCountry))
//                return true;

//            if (func.FromDate.HasValue && func.ToDate.HasValue)
//            {
//                if (_fixedHolidayFuncs
//                    .Where(x => x.FromDate.HasValue && x.ToDate.HasValue)
//                    .Any(x =>
//                        x.FromDate.Value.Month == func.FromDate.Value.Month && x.FromDate.Value.Day == func.FromDate.Value.Day &&
//                        x.ToDate.Value.Month == func.ToDate.Value.Month && x.ToDate.Value.Day == func.ToDate.Value.Day))
//                    return true;
//            }
//            else
//            {
//                if (_fixedHolidayFuncs
//                    .Where(x => !x.FromDate.HasValue && !x.ToDate.HasValue)
//                    .Any(x => x.Month == func.Month && x.Day == func.Day))
//                    return true;
//            }

            return(false);
        }
 /// <summary>
 /// Add <see cref="IFixedHolidayFunc"/>.<br />
 /// 添加 <see cref="IFixedHolidayFunc"/>。
 /// </summary>
 /// <param name="func">An instance of <see cref="IFixedHolidayFunc"/>.</param>
 /// <exception cref="ArgumentException">Country code of this func should be same as <see cref="DailyNodeTree"/>.</exception>
 public void Add(IFixedHolidayFunc func)
 {
     if (func == null)
     {
         return;
     }
     foreach (var month in GetTargetMonths(func))
     {
         _monthDictionary[month].Add(func);
     }
 }
        /// <summary>
        /// Add
        /// </summary>
        /// <param name="func"></param>
        public void Add(IFixedHolidayFunc func)
        {
            if (func == null)
            {
                return;
            }

            if (Contains(func))
            {
                return;
            }

            _fixedHolidayFuncs.Add(func);
        }
 /// <summary>
 /// Add <see cref="IFixedHolidayFunc"/> into <see cref="HolidayManager"/>.
 /// </summary>
 /// <param name="func">An instance of <see cref="IFixedHolidayFunc"/>.</param>
 /// <exception cref="ArgumentNullException">The instance of <see cref="IFixedHolidayFunc"/> func should not be null.</exception>
 /// <exception cref="InvalidOperationException">Failed to add <see cref="IFixedHolidayFunc"/> func.</exception>
 public void Add(IFixedHolidayFunc func)
 {
     _fixedDailyNodeTree.Add(func);
 }