我希望能够获得 System.Random 的实际状态或种子或其他任何东西,这样我就可以关闭一个应用程序,当用户重新启动它时,它只是用存储的那个“重新播种”它并像以前一样继续从未关闭。
这可能吗?
根据 Jon 的想法,我想出了这个来测试它;
static void Main(string[] args)
{
var obj = new Random();
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream("c:\\test.txt", FileMode.Create, FileAccess.Write, FileShare.None);
formatter.Serialize(stream, obj);
stream.Close();
for (var i = 0; i < 10; i++)
Console.WriteLine(obj.Next().ToString());
Console.WriteLine();
formatter = new BinaryFormatter();
stream = new FileStream("c:\\test.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
obj = (Random)formatter.Deserialize(stream);
stream.Close();
for (var i = 0; i < 10; i++)
Console.WriteLine(obj.Next().ToString());
Console.Read();
}
最佳答案
它是可序列化的,因此您可能会发现只需使用 BinaryFormatter
并保存字节数组...
示例代码:
using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;
public class Program
{
public static void Main(String[] args)
{
Random rng = new Random();
Console.WriteLine("Values before saving...");
ShowValues(rng);
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, rng);
Console.WriteLine("Values after saving...");
ShowValues(rng);
stream.Position = 0; // Rewind ready for reading
Random restored = (Random) formatter.Deserialize(stream);
Console.WriteLine("Values after restoring...");
ShowValues(restored);
}
static void ShowValues(Random rng)
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine(rng.Next(100));
}
}
}
sample 运行的结果很有希望:
Values before saving...
25
73
58
6
33
Values after saving...
71
7
87
3
77
Values after restoring...
71
7
87
3
77
不可否认,我并不热衷于内置序列化,但如果这是一个相当快速和肮脏的 hack,那应该没问题......
关于c# - 有没有办法获取 System.Random 的实际状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8188844/