【发布时间】:2012-05-15 09:56:06
【问题描述】:
从"Generated random numbers are always equal" 开始,我想知道;
为什么Random 类不为Next 公开一个带有可选最小值和最大值的静态方法?这听起来可能是一个愚蠢的问题,但根据经验,10 次中有 9 次我想生成一个随机数,而不必明确指定种子?我是否遗漏了一些明显的东西,这是有原因的吗?或者实际上我正在解释一种我尚未发现的方法?
【问题讨论】:
从"Generated random numbers are always equal" 开始,我想知道;
为什么Random 类不为Next 公开一个带有可选最小值和最大值的静态方法?这听起来可能是一个愚蠢的问题,但根据经验,10 次中有 9 次我想生成一个随机数,而不必明确指定种子?我是否遗漏了一些明显的东西,这是有原因的吗?或者实际上我正在解释一种我尚未发现的方法?
【问题讨论】:
这听起来像是一个愚蠢的问题,但根据经验,我想在 10 次中有 9 次生成一个随机数,而不必明确指定种子?
您不应该为此使用静态方法。您应该在确实保持状态的事物上使用实例方法。如果您每次调用Next 时都创建一个Random 的新实例,那么如果您快速连续多次调用它,最终会得到重复的数字。
您应该将“随机数的来源”视为与任何其他 IMO 一样的依赖项 - 可注入以便可测试。当然,如果你不使用依赖注入,那么这个论点可能不适用……但是你还有其他问题。
您可能希望每个线程有一个 Random 实例,因为 Random 不是线程安全的。
请参阅我的article on random numbers 了解更多详细信息和代码示例。
【讨论】: