同时创建具有不同种子的多个随机类

同时创建的两个 Random 类将具有相同的种子值。

使用 System.Guid.NewGuid().GetHashCode() 即使在同一时间也可以获得不同的种子。

Random rnd1 = new Random();
Random rnd2 = new Random();
Console.WriteLine("First 5 random number in rnd1");
for (int i = 0; i < 5; i++)
    Console.WriteLine(rnd1.Next());

Console.WriteLine("First 5 random number in rnd2");
for (int i = 0; i < 5; i++)
    Console.WriteLine(rnd2.Next());

rnd1 = new Random(Guid.NewGuid().GetHashCode());
rnd2 = new Random(Guid.NewGuid().GetHashCode());
Console.WriteLine("First 5 random number in rnd1 using Guid");
for (int i = 0; i < 5; i++)
    Console.WriteLine(rnd1.Next());
Console.WriteLine("First 5 random number in rnd2 using Guid");
for (int i = 0; i < 5; i++)
    Console.WriteLine(rnd2.Next());

实现不同种子的另一种方法是使用另一个 Random 实例来检索种子值。

Random rndSeeds = new Random();
Random rnd1 = new Random(rndSeeds.Next());
Random rnd2 = new Random(rndSeeds.Next());

这也可以通过仅设置 rndSeeds 的种子值来控制所有 Random 实例的结果。所有其他实例将从该单个种子值确定性地导出。