Я пишу специализированный класс рандомизатора и хочу обеспечить его качество с помощью CodeContracts. Обычный метод рандомизации получает верхний предел «max» и возвращает положительное случайное значение ниже этого предела.Ошибка в кодеКонтракты по модулю (%)?
public int Next(int max)
{
Contract.Requires<ArgumentOutOfRangeException>(0 <= max && max <= int.MaxValue);
Contract.Ensures(0 <= Contract.Result<int>());
Contract.Ensures(Contract.Result<int>() < maxValue);
return (int)(pick() % maxValue);
}
где pick()
возвращает случайное UInt32
. Мой вопрос: Почему CodeContracts терпят неудачу при последнем «обеспечении»?
Возможно, потому что 'maxValue! = Max'. –
Если 'max == 0', ваш код выдает исключение. Ваш параметр 'max' также плохо назван, так как он не представляет максимальное значение, а скорее максимальное значение плюс одно. – CodesInChaos
Ваш код даже не компилируется. У вас есть «max» и «maxValue». – CodesInChaos