为什么Random.Next中的minValue == maxValue?

时间:2010-11-30 07:54:21

标签: .net random

http://msdn.microsoft.com/en-us/library/2dx6wyd4.aspx

显然maxValue独占的上限。所以Random.Next(2,3)将始终返回2. Random.Next(2,2)也将始终返回2.为什么你认为他们甚至允许min在这种情况下等于max?这是误导!

2 个答案:

答案 0 :(得分:5)

看起来对我来说只是一些糟糕的设计。我同意maxValue应该严格地大于minValue - 如果它们相等,它应该抛出ArgumentOutOfRangeException

我不喜欢Random的一些方面 - 首先,将它正确插入(以一种记录良好的方式)会非常好,这样你就可以使用加密的方式使用子类安全的来源。它现在是可能的,但你基本上需要了解实现过多,以及哪些方法调用其他方法:(

每次循环创建一个新的Random实例时都会遇到问题,而明显的“修复”(静态变量)不是线程安全的,这是其他烦恼。

基本上,看到另一个小疣,我并不十分惊讶:(

答案 1 :(得分:4)

这只是一个惯例,如果有些误导。在任何情况下,您都可以构建这样的场景(每次输出都相同)。它对于选择数组的随机元素很有用,例如:

var random = new Random();
var element = someArray[random.Next(0, someArray.Length)]; // Of course, the lower bound needn't be specified here.

修改:误解了您的问题!我猜测它是a)设计不佳或b)当你的两个边界可能相同时的便利性。我同意这是不直观的。