public Cardinality(int minimum, Maybe<int> maximum) { if (minimum < 0) throw new ArgumentOutOfRangeException("minimum", "Start of range must be a positive number."); Minimum = minimum; Maximum = maximum .ThrowOn(x => x.Select(y => y == 0 || y < minimum ? new ArgumentOutOfRangeException("end", "End must be not be zero and greater than or equal to start.") : null).ValueOrDefault()) .Run(); }