我正在将VB6中的旧应用程序迁移到C#,但发现随机数序列存在问题:
(pin是字符串格式的大于0的数字) 在我的VB代码中,我发现:
Rnd("-" & pin)
Randomize(CDbl(pin))
因此,代码始终会生成相同的数字序列(请阅读this注释)
现在,在我的C#代码中,我有:
Random r = new Random(int.Parse(pin))
但是它不会生成相同的序列。
如果可能,我正尝试避免使用VBMath.Rnd()指令。
请,您能告诉我C#中的等效代码是什么吗?
非常感谢!
答案 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下的代码仅用于浏览。