Random.Next代码合同是否不正确?

jga*_*fin 4 .net random code-contracts

我已经安装了一个插件(Microsoft的Code Contract Editor Extensions),它显示了.NET的所有代码契约.

当我看合同Random.Next,它说 ensures result <= maxValue,而MSDN指出,包括maxValue是排斥的.合同不应该说ensures result < maxValue吗?

Mar*_*ell 6

它不是唯一的,MSDN 并没有声明它是.嗯,好吧,它在谈到时确实使用了"独家"这个词,这个词maxValue不太清楚,但实际情况是,在绝大多数情况下,它确实是预期的排他性.

然而,有一些角落案例:具体的例子,Next(0)回报0; Next(4,4)回报4.它没有选项时是包容性的,这在MSDN的"返回值"部分中有记录:

引用来自Next(maxValue):

但是,如果maxValue等于零,则返回maxValue.

来自Next(minValue,maxValue):

如果minValue等于maxValue,则返回minValue.

(当然也可以说" maxValue已退回")

因此,在这两种情况下,都可以maxValue返回.

唯一的例外是无参数Next(),它被严格记录< int.MaxValue.