简体   繁体   中英

C# Array is empty after using Array.Sort()

I'm generating six numbers, adding them to an array and displaying them in labels, after I attempt to sort the integers and then display them again, all of them return the value "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();
}

I combined both methods into one and it works fine, any help?

Your problem is that you're forgetting that the web server doesn't preserve the state of the generatedNums array between requests. Web Forms, like most web frameworks, is stateless. When you attempt to sort the array, you will need to regenerate the list or read it out of the labels. Your class members are not persisted between requests.

you only initialize values 0 - 4

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

but you display 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();

It would also help if you showed the declaration generatedNums

Ahh this being a web server is an extremely important detail and you can keep the variable from clearing like this

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

in your constructor or initializer you can add this

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

or better you can set it upon starting up the server

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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