繁体   English   中英

“ maxValue”必须大于零

[英]'maxValue' must be greater than zero

我不确定这是一个问题,但是消息中似乎有些不正确

我的第一次尝试:

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 大于零

如果您看一下源代码

  /*=====================================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);
  }

该值必须为正,零为正。

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

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

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

Random.Next方法(Int32)

maxValue:要生成的随机数的排他上限。 maxValue必须大于或等于0。

参数

maxValue

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

Random.Next方法(Int32)

该值不能为负。零或更高是可接受的,这就是为什么您超出答案的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM