C# 调用从循环内部返回随机数的方法

C# 调用从循环内部返回随机数的方法,c#,loops,random,C#,Loops,Random,我有一个“for”循环,它调用一个返回1到10之间的随机数的方法。然后循环将这个数字写入控制台。当我正常运行代码时,它总是返回相同的数字。然而,当我使用调试工具逐步完成代码时,一切似乎都正常工作;该方法在每个循环周期返回不同的随机数。发生了什么事 for(int i = 0; i < 5; i++) { int r = RandomNumber(); Console.WriteLine(r); }

我有一个“for”循环,它调用一个返回1到10之间的随机数的方法。然后循环将这个数字写入控制台。当我正常运行代码时,它总是返回相同的数字。然而,当我使用调试工具逐步完成代码时,一切似乎都正常工作;该方法在每个循环周期返回不同的随机数。发生了什么事

   for(int i = 0; i < 5; i++)
        {
            int r = RandomNumber();
            Console.WriteLine(r);
        }

   static int RandomNumber()
        {
            Random rand = new Random();
            int x = rand.Next(1, 11);
            return x;
        }
for(int i=0;i<5;i++)
{
int r=随机数();
控制台写入线(r);
}
静态整数随机数()
{
Random rand=新的Random();
int x=rand.Next(1,11);
返回x;
}

当应用程序开始运行时,应该只创建一次“新随机”对象

每次在循环中创建一个新的循环将导致随机数字序列显著减少——包括您看到的完全相同的数字,正如Microsoft自己的文档所说:

由于前两个随机对象是紧密连续创建的,因此它们使用基于系统时钟的相同种子值进行实例化,因此,它们生成相同的随机数序列


使用调试器逐步执行时,需要花费数秒的时间来逐步执行,因此使用不同的种子创建不同的Random实例。

rand
对象设置为类字段,而不是方法中的局部变量,并且只初始化一次。