模数(%)运算符上的CodeContracts失败
本文关键字:CodeContracts 失败 运算符 模数 | 更新日期: 2023-09-27 18:19:28
我正在编写一个专门的随机化器类,并希望使用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);
}
其中CCD_ 1返回随机的CCD_。我的问题是:为什么CodeContracts在最后一个"确保"时失败?
我无法重现您的问题。代码合同不会抱怨以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Diagnostics.Contracts;
namespace ContractModulo
{
class Program
{
UInt32 Pick()
{
return 0;
}
public int Next(int max)
{
Contract.Requires<ArgumentOutOfRangeException>(0 <= max && max <= int.MaxValue);
Contract.Ensures(0 <= Contract.Result<int>());
Contract.Ensures(Contract.Result<int>() < max);
return (int)(Pick() % max);
}
static void Main(string[] args)
{
}
}
}
如果我将您的maxValue
保留为int
类型的单独变量,而不是用max
替换它,也不会有什么抱怨。