簡體   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