'maxValue'必须大于零

时间:2017-06-20 05:47:39

标签: c#

我不确定这是一个问题,但消息中的内容似乎不正确

我的第一次尝试:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(-1));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

输出:

  

System.ArgumentOutOfRangeException

     

'maxValue'必须大于零。

     

参数名称:maxValue

我的第二次尝试:

try
{
    var r = new Random();
    Console.WriteLine(r.Next(0));
}
catch (Exception e)
{
    Console.WriteLine(e.GetType().ToString());
    Console.WriteLine(e.Message);
}

输出:

  

0

因此,问题是:为什么0 大于零

5 个答案:

答案 0 :(得分:2)

如果您查看source code

  /*=====================================Next=====================================
  **Returns: An int [0..maxValue)
  **Arguments: maxValue -- One more than the greatest legal return value.
  **Exceptions: None.
  ==============================================================================*/
  public virtual int Next(int maxValue) {
      if (maxValue<0) {
          throw new ArgumentOutOfRangeException("maxValue", Environment.GetResourceString("ArgumentOutOfRange_MustBePositive", "maxValue"));
      }
      Contract.EndContractBlock();
      return (int)(Sample()*maxValue);
  }

值必须为正,零为正。

答案 1 :(得分:2)

根据MSDN Random.Next Method (Int32)的定义。

  

maxValue类型:   System.Int32随机的独占上限   要生成的数字。 maxValue必须大于或等于0.

所以是的,我们可以说错误信息具有误导性。它应该大于或等于零。

答案 2 :(得分:1)

Random.Next Method (Int32)

  

maxValue:要生成的随机数的独占上限。 maxValue必须大于或等于0.

答案 3 :(得分:1)

<强>参数

maxValue

输入:System.Int32 要生成的随机数的唯一上限。 maxValue必须大于或等于0.

来自Random.Next Method (Int32)

答案 4 :(得分:0)

价值不能为负。零或以上是可以接受的。这就是为什么你的答案会超出答案。