C# 运行程序会得到与调试模式不同的结果

C# 运行程序会得到与调试模式不同的结果,c#,debugging,random,C#,Debugging,Random,我提供了一个简单的代码,它将输出10个介于0和100之间的随机数字。当我在visualstudio(C#)中使用F5运行它时,我得到了10次相同的数字。但是,如果我在调试模式下运行它,使用F10或F11逐行运行,我会得到10个不同的数字(可能不是全部不同,但它们是随机的) publicstaticvoidrand(){ 对于(int j=0;j

我提供了一个简单的代码,它将输出10个介于0和100之间的随机数字。当我在visualstudio(C#)中使用F5运行它时,我得到了10次相同的数字。但是,如果我在调试模式下运行它,使用F10或F11逐行运行,我会得到10个不同的数字(可能不是全部不同,但它们是随机的)

publicstaticvoidrand(){
对于(int j=0;j<10;j++){
随机r=新随机();
控制台写入线(r.Next(100));
}   
}
我知道如何解决这个问题,即在循环外实例化Random r并通过引用进行复制,但我想了解为什么会发生这种情况。我认为这与种子有关,但程序在调试模式下运行时确实工作,这让我感到困惑


另外,现在我想问的是,我是否总是需要测试调试模式是否给了我正确的结果。

您应该在循环之前创建
随机的
实例

public static void rand() {
    Random r = new Random();
    for (int j = 0; j < 10; j++) {        
        Console.WriteLine(r.Next(100));
    }   
}
回答你的问题: ... 如果我总是需要测试调试模式是否给了我正确的结果


不,您不需要怀疑调试模式的结果。他们是对的。你对它们的理解可能是错误的。

尝试在循环之外声明你的随机性谢谢你的建议,但我已经在文章中提到过,如果你用Reflector查看随机构造函数,这就是它的样子:
public Random():this(Environment.TickCount){}
public static void rand() {
    Random r = new Random();
    for (int j = 0; j < 10; j++) {        
        Console.WriteLine(r.Next(100));
    }   
}
public static void rand()
{
     for(int j = 0; j < 10; j++)
     {
          Random r = new Random(j);
          Console.WriteLine(r.Next(100));
     }
}