是否有比以下方法更好的生成 3 位随机数的方法:
var now = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
string my3digitrandomnumber = now.Substring(now.Length - 7, 3);
谢谢..
最佳答案
是的 - 您当前的代码根本不是随机的。它基于系统时间。特别是,如果您同时从多个线程使用它 - 或者甚至在同一线程中快速连续多次使用它 - 您每次都会得到相同的数字。
你应该使用 Random
或 RandomNumberGenerator
(哪个更安全)。
例如,一旦您获得了 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/