我不确定这是一个问题,但消息中的内容似乎不正确。
我的第一次尝试:
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
大于零?
答案 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)
maxValue:要生成的随机数的独占上限。 maxValue必须大于或等于0.
答案 3 :(得分:1)
答案 4 :(得分:0)
价值不能为负。零或以上是可以接受的。这就是为什么你的答案会超出答案。