迁移方法Randint)Visual Foxpro到C#.net

时间:2012-06-05 21:21:54

标签: c# asp.net .net foxpro visual-foxpro

我正在将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!

4 个答案:

答案 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调用它。

似乎是一个奇怪的设计,但我认为这是你的遗留系统。