C# 快速连续的随机数

C# 快速连续的随机数,c#,random,C#,Random,我需要快速连续地生成一个随机数序列,但是我的应用程序的结构意味着我不能重用相同的randomobject 所以我需要做的基本上是: using System; namespace ConsoleApplication5 { class Program { static void Main() { for (int i = 0; i < 100; i++) Console.WriteLine(new Random().Next(int.MaxValue

我需要快速连续地生成一个随机数序列,但是我的应用程序的结构意味着我不能重用相同的
random
object

所以我需要做的基本上是:

using System;
namespace ConsoleApplication5 {
  class Program {
    static void Main() {
      for (int i = 0; i < 100; i++)
        Console.WriteLine(new Random().Next(int.MaxValue));
      Console.ReadLine();
    }
  }
}
使用系统;
命名空间控制台应用程序5{
班级计划{
静态void Main(){
对于(int i=0;i<100;i++)
WriteLine(new Random().Next(int.MaxValue));
Console.ReadLine();
}
}
}
但是,这显然会返回相同生成次数的重复,因为所使用的种子是基于系统时钟的,循环的迭代速度非常快

请注意,要生成的随机数很小(~100左右),因此算法是否糟糕并不重要。请注意,很明显,由于我无法保留对
随机
对象的引用,我也无法在下一次调用中使用最后生成的值作为种子,因为这也不可用

我怎样才能每次都得到不同的号码


TIA

不要每次都随机添加新的

  var random = new Random();
  for (int i = 0; i < 100; i++)
    Console.WriteLine(random.Next(int.MaxValue));
var random=new random();
对于(int i=0;i<100;i++)
Console.WriteLine(random.Next(int.MaxValue));

不要每次都随机添加
new

  var random = new Random();
  for (int i = 0; i < 100; i++)
    Console.WriteLine(random.Next(int.MaxValue));
var random=new random();
对于(int i=0;i<100;i++)
Console.WriteLine(random.Next(int.MaxValue));
更改为:

Random rand = new Random();
for (int i = 0; i < 100; i++)
        Console.WriteLine(rand.Next(int.MaxValue));
Random rand=new Random();
对于(int i=0;i<100;i++)
Console.WriteLine(rand.Next(int.MaxValue));
更改为:

Random rand = new Random();
for (int i = 0; i < 100; i++)
        Console.WriteLine(rand.Next(int.MaxValue));
Random rand=new Random();
对于(int i=0;i<100;i++)
Console.WriteLine(rand.Next(int.MaxValue));

您可以使用静态变量:

using System;
namespace ConsoleApplication5 
{
    class Program 
    {
        private static readonly Random _random = new Random();

        static void Main() 
        {
            for (int i = 0; i < 100; i++)
                Console.WriteLine(_random.Next(int.MaxValue));
            Console.ReadLine();
        }
    }
}
使用系统;
命名空间控制台应用程序5
{
班级计划
{
私有静态只读随机_Random=new Random();
静态void Main()
{
对于(int i=0;i<100;i++)
Console.WriteLine(_random.Next(int.MaxValue));
Console.ReadLine();
}
}
}

或者使用一个局部随机变量,您可以在for循环外部实例化该变量并在内部重用。

您可以使用一个静态变量:

using System;
namespace ConsoleApplication5 
{
    class Program 
    {
        private static readonly Random _random = new Random();

        static void Main() 
        {
            for (int i = 0; i < 100; i++)
                Console.WriteLine(_random.Next(int.MaxValue));
            Console.ReadLine();
        }
    }
}
使用系统;
命名空间控制台应用程序5
{
班级计划
{
私有静态只读随机_Random=new Random();
静态void Main()
{
对于(int i=0;i<100;i++)
Console.WriteLine(_random.Next(int.MaxValue));
Console.ReadLine();
}
}
}


或者使用一个局部随机变量,您可以在for循环外部实例化该变量并在内部重用。

如果您确实无法创建一个持久的
Random
类实例,您可以使用该类获取一些随机字节,然后使用这些字节来计算随机数。当然,您每次都必须创建一个新实例,而且该类比
Random
慢一些,但它可以满足您的要求。

如果您确实无法创建一个持久的
Random
类实例,您可以使用该类获取一些随机字节,然后使用这些字节计算随机数。当然,您每次都必须创建一个新实例,而且该类的速度比
Random
慢一些,但它可以满足您的要求。

同样相关:正如我在问题的第一行中所说,这是不可能的。@ena这真是奇怪的限制。。很高兴你找到了另一个选择。同样相关的:正如我在问题的第一行所说,这是不可能的。@ena这真是奇怪的限制。。很高兴您找到了替代方案。是什么阻止您保留对生成器的引用?既然您需要这么小的数量,有没有理由不预生成它们?这是一个非常奇怪的限制:无法创建持久对象。想详细说明一下为什么会存在这种限制吗?为什么不能重复使用随机对象?你不能把它扔到一个成员变量或静态的地方吗?是什么阻止你保留对生成器的引用?既然您需要这么小的数量,有没有理由不预生成它们?这是一个非常奇怪的限制:无法创建持久对象。想详细说明一下为什么会存在这种限制吗?为什么不能重复使用随机对象?你能不能把它丢进一个成员变量或静态的某个地方?正如我在问题的第一行所说,这是不可能的。正如我在问题的第一行所说,这是不可能的。正如我在问题的第一行所说,这是不可能的。@enashnash,在这种情况下,我担心您必须编写自己的伪随机数生成器的自定义实现,它可以这样做,因为random类并不是按照您使用它的方式设计的。正如我在问题的第一行中所说的,这是不可能的。@enashnash,在这种情况下,我担心您将不得不编写自己的伪随机数生成器的自定义实现,它可以实现这一点,因为random类并不是按照您使用它的方式设计的。