c# - C#中的3位随机数

标签 c# .net

是否有比以下方法更好的生成 3 位随机数的方法:

var now = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
string my3digitrandomnumber = now.Substring(now.Length - 7, 3);

谢谢..

最佳答案

是的 - 您当前的代码根本不是随机的。它基于系统时间。特别是,如果您同时从多个线程使用它 - 或者甚至在同一线程中快速连续多次使用它 - 您每次都会得到相同的数字。

你应该使用 RandomRandomNumberGenerator (哪个更安全)。

例如,一旦您获得了 Random 的实例,您可以使用:

int value = rng.Next(1000);
string text = value.ToString("000");

(假设您希望将数字作为文本。如果您想要保证为三位数字的整数,请使用rng.Next(100, 1000)。 )

但是,关于 Random 有一些警告:

  • 不想每次使用时都创建一个新实例;除非您指定种子,否则这也是基于时间的
  • 不是线程安全的

所以理想情况下,您可能需要每个线程一个。我的article on randomness对此进行更多讨论并提供一些示例代码。

关于c# - C#中的3位随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14465661/

相关文章:

c# - 我的 MVC3 密码处理是否足够

c# - 检查按钮按下是否导致任何代码被执行

c# - 如何在另一个文本文件中搜索文本文件中的行

c# - 动态类型列表

c# - 将日期时间插入并更新到 SQL 数据库中

.net - .Net 继承和成员可见性的奇怪问题

c# - pdb 文件在 PostSharp 后丢失

c# - WPF 资源字典如何工作? (我无法加载我的。)

asp.net - 3 层架构中将采用哪些层扩展方法

c# - 具有 2 个实现相同接口(interface)的类的 IOC/DI