VB和C#中的相同随机序列

时间:2018-07-19 12:53:21

标签: c# vb.net random migration

我正在将VB6中的旧应用程序迁移到C#,但发现随机数序列存在问题:

(pin是字符串格式的大于0的数字) 在我的VB代码中,我发现:

Rnd("-" & pin)
Randomize(CDbl(pin))

因此,代码始终会生成相同的数字序列(请阅读this注释)

现在,在我的C#代码中,我有:

Random r = new Random(int.Parse(pin))

但是它不会生成相同的序列。

如果可能,我正尝试避免使用VBMath.Rnd()指令。

请,您能告诉我C#中的等效代码是什么吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

这里有各种问题:

  • 您决定不使用Microsoft重新实现Random() / Rnd() VB6方法(来自程序集Microsoft.VisualBasic)和

  • 没有Random()函数的完整的公开文档(Rnd()函数的部分文档,减去有关使用负数here进行播种的部分, here

现在... VB.NET here中有一种算法的重新实现,该算法声称是 VBMath Rnd()1:1克隆

但是问题在于要点的合法性...我们不知道作者如何对算法进行反向工程...如果您正在做的事是供私人使用的,那么您显然可以使用IlSpy并查看Microsoft.VisualBasic程序集,您可以在其中找到整个算法(少于100行代码,而projectData.m_rndSeed为327680,如Wiki上所述)。如果需要,甚至不需要使用IlSpy ... Microsoft将源代码(用vb.net编写)放入其referencesource github中,但请注意,同样存在合法性问题:referencesource下的代码仅用于浏览。