public static T ElementAtCycle <T>(this IEnumerable <T> source, int index, int count)
        {
            index = StdUtils.CycleIndex(index, count);

            if (source is IList <T> list)
            {
                return(list[index]);
            }

            return(source.ElementAt(index));
        }
        public static T ElementAtCycle <T>(this ICollection <T> source, int index)
        {
            index = StdUtils.CycleIndex(index, source.Count);

            if (source is IList <T> list)
            {
                return(list[index]);
            }

            return(source.ElementAt(index));
        }