c# - .NET 的 Random() 的实现更改

标签 c# .net random .net-1.1

我正在将一种用于解码的方法从 .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 版本的伪随机数生成用于解码,然后实现一种不依赖于不稳定行为的新编码/解码算法(例如实现 RandomGetHashCode ) 用于您的新版本软件。

关于c# - .NET 的 Random() 的实现更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9758472/

相关文章:

c# - 如何获取安装程序类中安装 MSI 的路径

java - 如何在 Java 中生成随机图像

c - 用随机数据填充内存区域

c# - .NET Ping() 给出错误超时?

c# - 生成错误 : "The process cannot access the file because it is being used by another process"

c# - 将托管线程上的模拟 token 传递给非托管线程

.net - 通过命令行在vstest.console.exe中使用/Enablecodecoverage时配置.coverage文件的位置

c# - CS0102 类型 'A' 已包含 'set_color' 的定义

Javascript 加密功能 - 它是如何工作的?

c# - CA1063 修改 Dispose() 使其调用 Dispose(true),然后在当前对象实例上调用 GC.SuppressFinalize,然后返回