我正在将Visual Fox Pro代码迁移到C#。 NET
是什么让Visual Fox Pro : 根据文本字符串(在文本框中捕获)生成一个5位数字(“48963”)的字符串,如果你总是输入相同的文本字符串将得到该字符串总是5位数(没有反转),我的代码在C#中。 NET应该生成相同的字符串。
我想将以下代码(Visual Fox Pro 6迁移到C#)
gnLower = 1000
gnUpper = 100000
vcad = 1
For y=gnLower to gnUpper step 52
genClave = **Rand(vcad)** * y
vRound = allt(str(int(genclave)))
IF Len(vRound) = 3
vDec = Right(allt(str(genClave,10,2)), 2)
finClave = vRound+vDec
Thisform.txtPass.value = Rand(971);
Exit
Endif
Next y
输出:
vcad = 1 return: 99905 vcad = 2 return: 10077 vcad = thanks return: 17200
THKS!
答案 0 :(得分:1)
正如我在您的其他问题http://foxcentral.net/microsoft/vfptoolkitnet.htm中发布的.net的VFP工具包可能具有相同的rand生成器函数
答案 1 :(得分:0)
相当于
Rand(vcad)
是
(new Random(vcad)).Next();
相当于
x = Rand(seedValue)
y = Rand()
是
Random r = new Random(seedValue);
x = r.Next();
y = r.Next();
但是,如果这些等效语句实际上在VFP中产生与c#.Net相同的结果,那么您应该认为自己非常幸运。底层实现必须是相同的,这会让我感到非常惊讶。如果它们不能产生相同的结果,并且这是您的要求,那么您需要找到FoxPro的Rand函数的内部实现,并在c#代码中复制它。
如果vcad的值范围受限于某个范围,最简单的解决方案是使用VFP生成查找值表并在c#转换中使用它。
答案 2 :(得分:0)
您的解决方案可能就像C#.net 4.0中的两个现有方法一样简单
public int MyRandomFunction(string seedString)
{
int hashCode = seedString.GetHashCode(); // Always returns the same integer based on a string
Random myGenerator = new Random(hasCode);
return myGenerator.Next(10000, 99999); // Returns a number between 10000 and 99999, ie 5 digits
}
您将始终获得相同的初始值,因为您始终使用相同的种子。
答案 3 :(得分:0)
将VFP RAND调用封装在COM dll中,如果真的需要获得与描述完全相同的行为,则从.net调用它。
似乎是一个奇怪的设计,但我认为这是你的遗留系统。