http://msdn.microsoft.com/en-us/library/2dx6wyd4.aspx
显然maxValue
是独占的上限。所以Random.Next(2,3)
将始终返回2. Random.Next(2,2)
也将始终返回2.为什么你认为他们甚至允许min在这种情况下等于max?这是误导!
答案 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)当你的两个边界可能相同时的便利性。我同意这是不直观的。