C# 随机数生成器是否保证稳定?

Gen*_*tor 3 c# random

我正在编写一个程序,该程序使用大量随机数来生成内容。但我想确保当以相同的种子开始时,生成的内容是相同的。因此,当我像这样创建随机数时:

Random r = new Random(seed);
int num = r.Next(); 
Run Code Online (Sandbox Code Playgroud)

如何保证 num 随着时间的推移始终相同(意味着:.NET 的多个版本)?后台有标准化的清单吗?或者我应该使用我自己的“随机列表”来确保这永远不会改变?

stu*_*rtd 9

不,相同种子的结果可能因框架版本而异,它此处的文档中

不保证 Random 类中随机数生成器的实现在 .NET Framework 的主要版本中保持相同。因此,您不应假设相同的种子会在不同版本的 .NET Framework 中产生相同的伪随机序列

该文档还包含其他部分中此建议的变体,例如在检索相同的随机值序列中

下面的示例使用 100100 作为任意种子值来实例化 Random 对象,显示 20 个随机浮点值,并保留种子值。然后它恢复种子值,实例化一个新的随机数生成器,并显示相同的 20 个随机浮点值。请注意,如果在不同版本的 .NET Framework 上运行该示例可能会产生不同的随机数序列。

和:

但是,请注意,在不同版本的 .NET Framework 下运行的进程中的 Random 对象可能会返回不同系列的随机数,即使它们使用相同的种子值进行实例化