我正在将VB6中的一个旧应用程序迁移到C#,发现随机数序列有问题:
(pin是字符串格式中大于0的数字(在我的VB代码中,我发现:
Rnd("-" & pin)
Randomize(CDbl(pin))
因此,代码始终生成相同的数字序列(阅读此注释(
现在,在我的C#代码中,我有:
Random r = new Random(int.Parse(pin))
但它不会生成相同的序列。
如果可能的话,我会尽量避免使用VBMath.Rnd((指令。
请告诉我C#中的等效代码是什么?
提前感谢!
这里有各种问题:
-
您决定不使用Microsoft重新实现的
Random()
/Rnd()
VB6方法(来自程序集Microsoft.VisualBasic
(和 -
Random()
函数没有完整的公开文档(Rnd()
函数有部分文档,减去关于在这里和这里使用负数补种的部分(
现在。。。这里有一个在VB.NET中重新实现的算法,它声称是VBMath Rnd((1:1克隆,
但问题在于该要点的合法性。。。我们不知道作者是如何对算法进行逆向工程的。。。如果你所做的是私人使用的,你显然可以使用IlSpy并查看Microsoft.VisualBasic
程序集,在那里你可以找到整个算法(它不到100行代码,projectData.m_rndSeed
是327680,正如维基上记录的那样(。如果你愿意,你甚至不需要使用IlSpy。。。微软将源代码(用vb.net编写(放在其引用源github中,但请注意,同样的合法性问题也适用:引用源下的代码仅用于浏览。