我正在将一种用于解码的方法从 .NET Framework 1.1 迁移到 .NET Framework 4。 我注意到 Random 的实现变了。所以给定相同的种子,Random.NextBytes返回不同的结果。
因此,如果我运行以下代码。
byte[] bytes = new byte[4];
System.Random random = new System.Random(50);
random.NextBytes(bytes);
for(int i=0; i< bytes.Length; i++)
{
Console.WriteLine("bytes[" + i + "] = " + bytes[i]);
}
在 .NET Framework 1.1 下它返回:
bytes[0] = 216
bytes[1] = 124
bytes[2] = 183
bytes[3] = 58
在 .NET Framework 4 下它返回:
bytes[0] = 154
bytes[1] = 49
bytes[2] = 183
bytes[3] = 48
解决此问题的最佳方法是什么?
最佳答案
这不是 Random
的问题,它完全满足其记录的接口(interface)。这是您的软件依赖于实现细节的问题。从这个错误中吸取教训,不要再犯。
就修复问题而言,您可以实现自己的 1.1 版本的伪随机数生成用于解码,然后实现一种不依赖于不稳定行为的新编码/解码算法(例如实现 Random
或GetHashCode
) 用于您的新版本软件。
关于c# - .NET 的 Random() 的实现更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758472/