WindowsFormsApplication C#发生了奇怪的事情

Hri*_*lov 1 c# winforms

我做了一个简单的WindowsFormsApplication,但我遇到了一些困难.在表单中我有10个TextBoxes和一个按钮.该程序的目的是在单击按钮时在每个框中生成不同的数字.这是代码的一部分:

private void button1_Click(object sender, EventArgs e)
    {
        int p = 0;
        int[] array = GeneratingArray();

        foreach (Control c in tableLayoutPanel1.Controls)
        {
            if (c.GetType().ToString() == "System.Windows.Forms.TextBox")
            {
                c.Text = array[p].ToString();
                p++;
            }
        }
    }

    public int GeneratingInt()
    {
        int random;
        Contract.Ensures(Contract.Result<int>() > -11, "Array out of Bounds(-10 ; 10)");
        Contract.Ensures(Contract.Result<int>() < 11, "Array out of Bounds(-10 ; 10)");
        Random gnr = new Random();
        random = gnr.Next(20);
        return random;
    }

    public int[] GeneratingArray()
    {
        int[] array = new int[10];
        int random;
        for (int i = 0; i < 10; i++)
        {
            random = GeneratingInt();
            array[i] = random;
        }

        return array;
    }
Run Code Online (Sandbox Code Playgroud)

问题是当我使用调试器时一切正常,但是当我在所有框中启动应用程序时生成相同的数字.我找不到导致这类问题的原因,所以我问你.谢谢.

Ree*_*sey 6

问题是您的应用程序正在快速运行.

通过创建Random每个调用的新实例GeneratingInt,您将使用当前时间播种随机.当在紧密循环中运行时,这会使随机生成器每次都提供相同的数字.

移动Random到类级变量,构造它一次,并重用相同的实例.这将使它按照您希望的方式运行.