为什么minValue包含,但maxValue对Random.Next()是独占的?

时间:2016-08-12 12:16:28

标签: c# random

这对我来说有点奇怪。我相信我会很快习惯它,但我只是想知道为什么会这样做。

2 个答案:

答案 0 :(得分:6)

原因1)maxValue - minValue给出了范围内可能的项目数,因此您可以使用以下代码:

var randomItemFromArray = MyArray[random.Next(0, MyArray.Length)];

如果上限是包含的,那么这样做会看起来有点笨重/奇怪。

原因2)编码更容易

原因3)当使用浮点时,它确保了均匀的可能性 -

有关详细信息,请参阅Exclusive upper bound in random number range

答案 1 :(得分:4)

想象一下,你有几个范围,例如

  • 从0开始
  • 从100(感兴趣的范围)开始
  • 从500(下一个范围)开始
  • 从1000开始

我们必须得到第二范围的随机值,我们应该做的全部

random.Next(100, 500);

即。第一个参数是范围开始,第二个参数是 next 范围开始; 如果范围复杂,这非常方便:我们必须知道每个地方 范围开始(我们不需要计算完全包含上边界,但可以说"向上,但不包括下一个范围")。例如。我们想在2016年2月获得随机时刻(最多第二个):

DateTime start     = new DateTime(2016, 2, 1);
// Please notice how much easier it is to put "1 Mar" than "29 Feb 23:59:59"
DateTime startNext = new DateTime(2016, 3, 1);

// Please notice: just subtraction
DateTime random = start + 
  TimeSpan.FromSeconds(random.Next((startNext - start).TotalSeconds));