Random(int seed)保证什么?

Gle*_*eno 14 .net c# random

我正在开发一个项目,它依赖于为更大的集合随机分配用户(没有任何花哨,只是统一)的子集.每个用户都有一个从同构到整数的唯一标识符.据我所知,有两种方法可以做到这一点.

  1. 在用户和上述较大集合的键控元素之间创建数据库联结表,并为每个用户创建一次函数.这对我的需求来说有点不切实际,所以我宁愿这样做......
  2. 在运行时,通过类似的函数确定子集,但使用唯一的用户ID作为种子值,并将该集合放在内存中.下次需要它时,从更大的一组再创建它.

所以我的问题是,如果我使用.NET Random对象创建第二个使用user-id作为种子值的函数,Microsoft是否保证将来不会更改Random算法?即所有新的Random(n)的Next()序列在所有机​​器上都会永远相同吗?

或者,我可以创建自己的随机生成器,并将其与我的代码打包.事实上,这是我可能会做的,但我仍然很想知道答案.

Mar*_*ett 14

不,明确不保证在不同版本之间兼容:

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


Ped*_*C88 8

微软不能保证他们的代码永远不会改变,因为代码改进发生在已识别的漏洞,问题或商品上 - 但是,到目前为止,代码没有改变,如果你不改变框架,你应该总是有相同的功能.

所以请把它好像不会改变......但是当你决定升级你的框架时,确保它仍然有效.

  • 相信圣洁的整数类型.它是......所以...整数! (3认同)
  • 就在发布之前,我浏览了同样的MSDN文章,一无所获!男孩是我的脸红.:)好吧,非常感谢你指出它.虽然,我不会留意你的建议,因为我更喜欢编码而忘记 - 我只是实现我自己的统一随机整数生成器.不应该太难. (2认同)