有没有比以下更好的方法来生成 3 位随机数:
var now = DateTime.Now.Ticks.ToString(CultureInfo.InvariantCulture);
string my3digitrandomnumber = now.Substring(now.Length - 7, 3);
谢谢..
是的 - 您当前的代码根本不是随机的。它基于系统时间。特别是,如果您同时在多个线程中使用它 - 或者甚至在同一线程中快速连续多次使用它 - 您每次都会得到相同的数字。
您应该使用Random
or RandomNumberGenerator
(更安全)。
例如,一旦你有了 的实例Random
,你可以使用:
int value = rng.Next(1000);
string text = value.ToString("000");
(假设您希望将数字作为文本。如果您想要一个保证为三位数的整数rng.Next(100, 1000)
,请使用。)
但是,有一些警告Random
:
因此,理想情况下,您可能希望每个线程一个。我关于随机性的文章对此进行了更多讨论,并提供了一些示例代码。
int r = (new Random()).Next(100, 1000);
您可以使用Random
该类并调用Next(10)
3 次。
嗯,首先,你有一个奇怪的设置,你为什么要先得到日期?
您应该使用它来获得 3 位数字(小于 1000)。
Random rand = new Random(); // <-- Make this static somewhere
const int maxValue = 999;
string number = rand.Next(maxValue + 1).ToString("D3");
这maxValue + 1
是因为参数 forRandom.Next(int)
是一个排他性的上限,这意味着返回的数字将始终小于参数。它永远不可能与它相等。
new Random.NextDouble() * 1000