我遇到了一种使用C#
中的Random.Next()
方法生成不同值的方法
以下是代码:
private static readonly Random random = new Random();
private static readonly object syncLock = new object();
public static int RandomNumber(int min, int max)
{
lock(syncLock) { // synchronize
return random.Next(min, max);
}
}
我的问题是,每次使用它们创建新实例时如何保存每个值,并分别对每个对象使用它们
e.g
//Creating new instance in the Main class
public class ChainStore
{
public static void Main()
{
var purchaseDetails = new PurchaseDetails();
}
}
//how i call it in the constructor (using the RandomNumber method from above)
public class PurchaseDetails
{
public PurchaseDetails()
{
this.CardID = RandomNumber(1000, 9999);
}
}
所以现在,例如,如果我想创建
var purchaseDetails2 = new PurchaseDetails();
并重新运行程序(使用F5 / ctrl + F5)我想从第一次运行程序时使用相同的随机生成值。换句话说,我希望Card.ID具有相同的值而不是新的随机生成的值;
我是否必须保存List
或Array
中的所有值?
如果是,我该怎么做?提前谢谢!
答案 0 :(得分:3)
我希望在第一次运行程序时使用相同的随机生成值。
您在内部使用的Random()的重载会为伪随机数生成算法生成种子。
要在每次运行中获得相同的结果,请使用alternate constructor
提供您选择的种子private static readonly Random random = new Random(42);
只要您的程序以确定的顺序运行,您将获得相同的“随机”数字(例如,如果它使用多个线程或根据用户输入更改流量,则不会是确定性的。)