-4

我正在将 Visual Fox Pro 代码迁移到 C#。网

是什么让 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

谢谢!

4

4 回答 4

1

正如我在您的其他问题http://foxcentral.net/microsoft/vfptoolkitnet.htm中发布的那样,.net 的 VFP 工具包可能具有相同的 rand 生成器功能

于 2012-06-05T22:24:31.633 回答
0

如果您确实需要获得与所述完全相同的行为, 请将 VFP RAND 调用封装在 COM dll 中并从 .net 调用它。

似乎是一个奇怪的设计,但我猜这对你来说是遗留系统。

于 2012-06-06T01:41:48.193 回答
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# 转换中使用它。

于 2012-06-05T21:57:12.370 回答
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
}

您将始终获得相同的初始值,因为您总是从相同的种子开始。

于 2012-06-05T21:58:59.530 回答