.net 创建随机对象时,如何找出种子是什么?

.net 创建随机对象时,如何找出种子是什么?,.net,random,.net,Random,当您创建一个无参数的.net随机对象时,您会得到: 使用与时间相关的参数初始化Random类的新实例 默认种子值 另一方面,可以指定种子 System.Random rand1 = new System.Random(); System.Random rand2 = new System.Random(222); 对于rand2种子是已知的。如何找到rand1的种子,以便在不同的时间点获得相同的结果?随机类的种子使用Environment.TickCount作为种子。虽然从技术上讲,您可以自己

当您创建一个无参数的
.net
随机对象时,您会得到:

使用与时间相关的参数初始化Random类的新实例 默认种子值

另一方面,可以指定种子

System.Random rand1 = new System.Random();
System.Random rand2 = new System.Random(222);
对于
rand2
种子是已知的。如何找到
rand1
的种子,以便在不同的时间点获得相同的结果?

随机类的种子使用Environment.TickCount作为种子。虽然从技术上讲,您可以自己使用该属性来了解种子,但它不可能100.00%可靠,因为它在两个语句之间发生变化的可能性很小

您必须这样做,以确保始终安全:

int seed = Environment.TickCount;
System.Random rand1 = new System.Random(seed);
Random类的使用Environment.TickCount作为种子。虽然从技术上讲,您可以自己使用该属性来了解种子,但它不可能100.00%可靠,因为它在两个语句之间发生变化的可能性很小

您必须这样做,以确保始终安全:

int seed = Environment.TickCount;
System.Random rand1 = new System.Random(seed);

为什么您希望在不同的时间点获得相同的结果?如果是用于测试,那么只需在测试装备中使用第二个构造函数,在实际应用程序中使用第一个构造函数。可以使用当前的毫秒作为种子并保存该数字。只需检查并了解该值未存储在
Random
类中,因此无法通过反射读取它。从实例的其他字段重新计算它似乎也很困难。@ChrisF,我用它来生成一些随机的“艺术”。如果我喜欢输出,我希望能够复制它。您可能知道,使用第二个构造函数,可以得到相同的结果。总是我想我可以作弊并使用两个随机对象。第一个获得第二个种子。:-)@阿德里安-他并不是说他的解决方案不可靠。他说,如果您只是访问
Environment.TickCount
,然后调用无参数构造函数(它本身调用
Environment.TickCount
),那么它很可能会在这两次访问之间发生变化。因此,您必须先读取tickcount,然后将其作为参数传递。为什么要在不同的时间点获得相同的结果?如果是用于测试,那么只需在测试装备中使用第二个构造函数,在实际应用程序中使用第一个构造函数。可以使用当前的毫秒作为种子并保存该数字。只需检查并了解该值未存储在
Random
类中,因此无法通过反射读取它。从实例的其他字段重新计算它似乎也很困难。@ChrisF,我用它来生成一些随机的“艺术”。如果我喜欢输出,我希望能够复制它。您可能知道,使用第二个构造函数,可以得到相同的结果。总是我想我可以作弊并使用两个随机对象。第一个获得第二个种子。:-)@阿德里安-他并不是说他的解决方案不可靠。他说,如果您只是访问
Environment.TickCount
,然后调用无参数构造函数(它本身调用
Environment.TickCount
),那么它很可能会在这两次访问之间发生变化。因此,您必须首先读取tickcount,然后将其作为参数传递。您是否有理由明确为
随机
指定
系统
命名空间,而不是为
环境
?它只是从OP中复制/粘贴的,不知道他为什么需要它。你是否有理由明确地为
随机
指定
系统
名称空间,而不是为
环境
指定名称空间?这只是OP的复制/粘贴,不知道他为什么需要它。