System.Random每次给出相同的值3次

时间:2012-09-21 10:15:50

标签: random f#

  

可能重复:
  F# getting a list of random numbers

我每次在tick(计时器)上从列表中得到随机值,但是我得到相同的3次才会改变...

代码:

let timer = new DispatcherTimer()
timer.Tick.Add  <| fun _ -> X.Change()
timer.Interval  <- new TimeSpan(0,0,3)    

    member X.Change() = 
        (Seq.nth
            (System.Random().Next(Seq.length actions))
                <| actions)()

为什么呢?我想每次都获得不同的价值

1 个答案:

答案 0 :(得分:2)

我不完全确定您的示例,但一般原则是您应该创建一个System.Random实例(或者每个线程一个实例,如果您有一个多线程应用程序)然后使用它多次。

尝试这样的事情:

let timer = new DispatcherTimer() 
let rnd = new System.Random()
timer.Tick.Add  <| fun _ -> X.Change() 
timer.Interval  <- new TimeSpan(0,0,3)     

    member X.Change() =  
        (Seq.nth 
            (rnd.Next(Seq.length actions)) 
                <| actions)() 

Random对象是可变的,并保留一些用于生成随机值序列的状态。当您创建新实例时,它会使用当前时间初始化状态,因此如果您同时创建多个实例,则会获得相同的数字。

顺便说一句,如果你需要访问actions的随机元素,那么最好将它们存储为数组,因为那样你就可以写:

member X.Change() =  
  actions.[rnd.Next(actions.Length)]()