如何在 C# 中随机化种子

Nic*_*Nic 1 c# random

我需要在 C# 中生成随机整数。我正在使用时钟时间来设置种子。但是,由于 rnd.Next() 函数可能需要不到一毫秒,因此如果必须生成整数列表,这将不起作用。

        for( int i=0; i<5; i++) {
            int max_val = 10; // max value
            var rnd = new Random(DateTime.Now.Millisecond);
            int randind = rnd.Next(0, max_val);
            Console.WriteLine(randind);
        }
Run Code Online (Sandbox Code Playgroud)

输出:
1 5 5 5 5

如何在不增加丑陋睡眠的情况下以干净的方式随机化种子?

Ste*_*per 6

Random在循环外创建您的对象并且不提供种子参数 - 将为您挑选一个。通过将它从循环中取出, rnd.Next() 无论如何都会给你一个随机序列。

   var rnd = new Random();     
   for( int i=0; i<5; i++) {
        int max_val = 10; // max value
        int randind = rnd.Next(0, max_val);
        Console.WriteLine(randind);
    }
Run Code Online (Sandbox Code Playgroud)

  • 伟大的!非常感谢! (2认同)

Mil*_*dez 5

Guid对象每次都会保证不同的结果。你可以这样做:

... new Random(Guid.NewGuid().GetHashCode()) 
Run Code Online (Sandbox Code Playgroud)

  • guid 很昂贵,并且哈希码不能保证唯一,因此您最好忽略种子构造函数,而不要一遍又一遍地构造 Random 实例。 (3认同)