C# 生成随机整数时无法包含上限

C# 生成随机整数时无法包含上限,c#,random,C#,Random,我正在编写一个方法,该方法将生成1到6之间的无符号int(包括边界)。我目前的方法如下 private static Random random = new Random(); ... private static uint GetRandomChannel() { return Convert.ToUInt32(random.Next(1, 6)); } 我已经运行了一千次这个方法,我得到

我正在编写一个方法,该方法将生成1到6之间的无符号int(包括边界)。我目前的方法如下

        private static Random random = new Random();
        ...
        private static uint GetRandomChannel()
        {
            return Convert.ToUInt32(random.Next(1, 6));
        }
我已经运行了一千次这个方法,我得到了数字1到5,但从来没有得到6。为什么会发生这种情况?我如何修复它?

的第二个参数是一个排他性上限

参数

minValue:返回的随机数的包含下限

maxValue:返回的随机数的唯一上界。maxValue必须 大于或等于最小值

返回值

大于或等于minValue且小于maxValue的32位有符号整数;也就是说,返回值的范围包括minValue,但不包括maxValue。如果minValue等于maxValue,则返回minValue

这意味着
random.Next(1,6)
将只返回
n
范围
1内的值,您无法“修复”该值;这就是我们要做的:

大于或等于零且小于的32位有符号整数 最大值


因此,如果要在[a,b]中生成一个随机整数,则需要使用
。根据MSDN,下一步(a,1+b)

,上界是独占的,而下界是包含的

因此,您的代码应该是:

return Convert.ToUInt32(random.Next(1, 7));

根据MSDN文档,
random.Next
函数返回的值严格小于
MaxValue
(在您的情况下为6)。

根据,下限是包含的,上限是独占的。这意味着随机。Next(下一个,上一个)将返回较低的数字,但它保证永远不会返回较高的数字。

更令人失望的是,我一直在调用random。Next(n,n+1)重复,结果似乎根本不是随机的@西努,这完全是随机的!唯一无法与真实RNG区分的伪RNG!;-)
return Convert.ToUInt32(random.Next(1, 7));