2017-06-20 104 views
2

我不确定这是一个问题,但在邮件中看起来像不正确'maxValue'必须大于零

我第一次尝试:

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

回答

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); 
    } 

的值必须为正和零为正。

+2

0如何正确? 0既不是正数也不是负数! 0是0! – Sweeper

1

参数

maxValue 

类型:System.Int32 独家上限的随机数的产生。包括maxValue必须大于或等于0。

Random.Next Method (Int32)

2

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

包括maxValue类型: System.Int32独家上限随机数 的产生。 maxValue必须大于或等于0.

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

0

该值不能为负。零或以上是可以接受的。这就是为什么你得到以上答案。

相关问题