private static long CycleOrFailIfGreaterThanMaximum(ISequence sequence, long newValue) { if (newValue <= sequence.MaxValue) return newValue; if (sequence.Cycle) { return sequence.StartAt + sequence.Increment; } throw new MaximumValueReachedException(sequence.MaxValue); }