private static long CycleOrFailIfLessThanMinimum(ISequence sequence, long newValue) { if (newValue >= sequence.MinValue) return newValue; if (sequence.Cycle) { return sequence.StartAt + sequence.Increment; } throw new MinimumValueReachedException(sequence.MinValue); }