簡體   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