繁体   English   中英

使用Array.Sort()后,C#数组为空

[英]C# Array is empty after using Array.Sort()

我正在生成六个数字,将它们添加到数组中并在标签中显示它们,然后尝试对整数进行排序,然后再次显示它们,它们全部返回值“ 0”

int[] generatedNums = new int[6]; //Array containing generated integers

 protected void BtnGenerate_Click(object sender, EventArgs e)
{

    Random newRandom = new Random();

    for (int i = 0; i < 5; i++)
    {  
        generatedNums[i] = newRandom.Next(1, 50);
    }

    lblNum1.Text = generatedNums[0].ToString();
    lblNum2.Text = generatedNums[1].ToString();
    lblNum3.Text = generatedNums[2].ToString();
    lblNum4.Text = generatedNums[3].ToString();
    lblNum5.Text = generatedNums[4].ToString();
    lblNum6.Text = generatedNums[5].ToString();

}

protected void BtnSort_Click(object sender, EventArgs e)
{
    Array.Sort(generatedNums);

    lblNum1.Text = generatedNums[0].ToString();
    lblNum2.Text = generatedNums[1].ToString();
    lblNum3.Text = generatedNums[2].ToString();
    lblNum4.Text = generatedNums[3].ToString();
    lblNum5.Text = generatedNums[4].ToString();
    lblNum6.Text = generatedNums[5].ToString();
}

我将两种方法合而为一,效果很好,有帮助吗?

您的问题是,您忘记了Web服务器不会在两次请求之间保留generatedNums数组的状态。 像大多数Web框架一样,Web窗体是无状态的。 当您尝试对数组进行排序时,您将需要重新生成列表或从标签中读取它。 您的班级成员不会在请求之间保持不变。

您仅初始化值0-4

 for (int i = 0; i < 5; i++)

但您显示0-5

lblNum1.Text = generatedNums[0].ToString();
lblNum2.Text = generatedNums[1].ToString();
lblNum3.Text = generatedNums[2].ToString();
lblNum4.Text = generatedNums[3].ToString();
lblNum5.Text = generatedNums[4].ToString();
lblNum6.Text = generatedNums[5].ToString();

如果您显示声明了generatedNums,这也将有所帮助

嗯,这是一个Web服务器,这是一个非常重要的细节,您可以像这样避免清除变量

private int[] generatedNums
{
    get { return (int[])HttpContext.Current.Session["generatedNums"]; }
    set { HttpContext.Current.Session["generatedNums"] = value; }
}

在构造函数或初始值设定项中,您可以添加此

if (generatedNums == null)
    generatedNums = new int[6];

或者更好的是,您可以在启动服务器时进行设置

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM