关于默认Random by Seed,它会在不同的系统中更改吗?

Eri*_*Yin 1 c# random

我知道默认c#Random()是一个伪随机数序列.我只需要这样一个,我不是在寻找这个问题的真实随机.

请允许我提问:

我试过:new Random(100000000).Next(999999999),我得到了145156561,就像其他人说的那样.

我的问题是:将通过相同的种子的伪随机数序列在不同的系统(WIN2003,WIN2008,单等),在不同的.NET版本的变化(达网络3,达网络4,C#2,C#3等),或将在任何其他环境改变?

所有我想知道的,一旦我编码,我现在和未来的所有地方,我总是会得到相同种子的伪随机数序列吗?

Chr*_*ain 6

不可靠.一般来说,弄清楚这种事情的方法是查看文档(MSDN for .NET).如果没有描述算法并且不是其他公布的算法的实现,则应该将其视为实现细节并且可以改变.

你需要非常严格地阅读这些文档 - 如果有解释的余地​​,你需要假设最糟糕的情况.在这种情况下:http://msdn.microsoft.com/en-us/library/system.random.aspx仅指出:

向不同的随机对象提供相同的种子值使得每个实例产生相同的随机数序列.

它适用于框架:

受以下版本支持:4,3.5,3.0,2.0,1.1,1.0 .NET Framework Client Profile

受以下版本支持:4,3.5 SP1可移植类库

受以下版本支持:可移植类库

没有任何关于它的说明是否保证在任何未来版本中以相同的方式工作,或者甚至是否从各种支持的框架获得相同的结果.事实上,它指出:

来电者须知

在.NET Framework的主要版本中,不保证Random类中随机数生成器的实现保持不变.因此,您的应用程序代码不应假定相同的种子将在.NET Framework的不同版本中产生相同的伪随机序列.

  • 你怎么可能得出结论呢?我的完整答案恰恰相反! (2认同)
  • @EricYin他们**目前**使用Donald E. Knuth,但他们说他们可以在主要版本的.NET之间随时更改它(因此.NET5可以使用完全不同的东西) (2认同)