C#随机数生成器每次仍然给出相同的数字

Mik*_*ini 2 c# random

//创建一个由十行组成的字符串数组.string [] personalNumbers; //将personalNumbers声明为10元素数组personalNumbers = new string [10]; // = {"第一个数字","第二个数字","第三行"等}

        for (int i = 0; i < 9; i++)   // populate the array  with 10 random values
        {
            Random random = new Random();
            int randomNumber = random.Next(1, 50);

            string RandomNumberText = Convert.ToString(randomNumber);

            personalNumbers[i] = RandomNumberText;   
        }
Run Code Online (Sandbox Code Playgroud)

嗨,我知道这个SEEMS是先前提出的问题的副本,但我试图生成1到50之间的一系列随机数来填充数组

问题是,如果我按照课堂上的教学方式进行,每个数字都是一样的

我知道问题是紧密循环导致随机播种的数字相同

然而,其他线程没有解决的问题是如何在使用循环迭代时修复此问题....

迄今为止所有的解释都超出了我们的水平,我(以及其他的问题BTW)不知道如何将它们作为一种解决方案实现,我也无法在课堂上提交,因为它们是我们尚未涉及的技术

微软的教程坚持认为将随机内置于循环中是正确的解决方案

我已经尝试在循环外部放置一个随机实例,然后从循环内部调用它,但这导致了异常

是否有一种直接的方法来使用随机创建一系列不会遇到此问题的随机数?

Tim*_*ter 5

在循环外创建随机实例:

Random random = new Random();
for (int i = 0; i < 9; i++)   // populate the array  with 10 random values
{
Run Code Online (Sandbox Code Playgroud)

MSDN:

随机数生成从种子值开始.如果重复使用相同的种子,则生成相同的数字序列.产生不同序列的一种方法是使种子值与时间相关,从而与每个新的Random实例产生不同的序列.默认情况下,Random类的无参数构造函数使用系统时钟生成其种子值,而其参数化构造函数可以根据当前时间中的滴答数采用Int32值.但是,由于时钟具有有限的分辨率,使用无参数构造函数以紧密连续的方式创建不同的随机对象会创建随机数 生成器,从而生成相同的随机数序列.