//Pre-constraint indicates value of i accepted from caller must be greater or equal to 1; and that c cannot be null.
//Post-Constraint imply that on method exit the constraints should also be respected otherwise the method cannot successfully complete - constraint exception condition
The above constraint would be enforced on calling code at design or compile time (if a known value or a variable whose value is known is being passed). The constraint on class instances being used in a method should then be passed up the chain to all callers.
This would at least reduce a lot of run-time time issues since the constraints are enforced at design or compile time.
In fact the i<=int.MaxValue constraint would be superfluous if int already defines constraint on acceptable values of between MinValue and MaxValue.