c# - 有没有办法获取 System.Random 的实际状态?

标签 c# .net random

我希望能够获得 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/

相关文章:

c# - 用C#制作<h1> </h1>

c# - 在 C#/.NET 中上传文件到 FTP 服务器或从 FTP 服务器下载文件

c# - 开始使用 MVC 创建大型 C# 应用程序的最佳方法是什么?

c# - 使用多个 Entity Framework 上下文并行化查询

c# - 在 web.config 的 mailSettings 部分处理多个邮件服务器的最佳方式是什么?

c# - 像 native 照片应用程序一样将图像裁剪为 "perfect"正方形

c# - List<Country> 成为 Country [] 跨网络服务

c++ - 加权随机数 V2(动态情况)

javascript - 超链接到随机 HTML 页面

javascript - 你如何在 Javascript 中获得随机 RGB?