随机始终生成相同的数字

时间:2016-01-13 11:28:55

标签: c# random

我正在使用Random类生成任何随机整数,但它总是返回相同的数字

static Random rand = new Random();
public static int GetOrderID()
{           
     return rand.Next(Math.Abs(int.MinValue + 1), int.MaxValue);
}

注意随机类是静态的并且在函数

之外生成

2 个答案:

答案 0 :(得分:6)

如果

你会期待什么?
Math.Abs(int.MinValue + 1) 

等于

int.MaxValue

所以你的范围只包含一个数字。

答案 1 :(得分:2)

很简单:拨打Math.Abs会从号码中删除该号码。由于最小整数为-2,147,483,648,其绝对值(递增1)为2,147,483,647,等于int.MaxValue的绝对值。

因此,在致电Math.Abs(int.MinValue + 1), int.MaxValue时,您总是以2,147,483,647作为返回值,对吗?

如果您需要任意int,则可以在不使用rand.Next(int.MinValue, int.MaxValue)的情况下使用Math.Abs。对于任何非负整数,您可以使用不带任何参数的重载。