【问题标题】:Why does `Random` not contain a static `Next` method by default? [duplicate]为什么 `Random` 默认不包含静态的 `Next` 方法? [复制]
【发布时间】:2012-05-15 09:56:06
【问题描述】:

可能重复:
class System.Random .. why not static?

"Generated random numbers are always equal" 开始,我想知道;

为什么Random 类不为Next 公开一个带有可选最小值和最大值的静态方法?这听起来可能是一个愚蠢的问题,但根据经验,10 次中有 9 次我想生成一个随机数,而不必明确指定种子?我是否遗漏了一些明显的东西,这是有原因的吗?或者实际上我正在解释一种我尚未发现的方法?

【问题讨论】:

标签: c# .net random


【解决方案1】:

这听起来像是一个愚蠢的问题,但根据经验,我想在 10 次中有 9 次生成一个随机数,而不必明确指定种子?

您不应该为此使用静态方法。您应该在确实保持状态的事物上使用实例方法。如果您每次调用Next 时都创建一个Random 的新实例,那么如果您快速连续多次调用它,最终会得到重复的数字。

您应该将“随机数的来源”视为与任何其他 IMO 一样的依赖项 - 可注入以便可测试。当然,如果你不使用依赖注入,那么这个论点可能不适用……但是你还有其他问题。

您可能希望每个线程有一个 Random 实例,因为 Random 不是线程安全的。

请参阅我的article on random numbers 了解更多详细信息和代码示例。

【讨论】:

  • 谢谢,好文章……我可能要买你的书了,哈哈。
猜你喜欢
  • 1970-01-01
  • 2012-06-10
  • 1970-01-01
  • 2018-05-27
  • 2019-11-24
  • 2011-05-10
  • 2011-02-13
  • 2011-11-16
  • 1970-01-01
相关资源
最近更新 更多