使用未赋值的局部变量(字符串)出错

本文关键字:字符串 出错 局部变量 赋值 | 更新日期: 2023-09-27 18:05:49

所以我得到这个错误在文本框分配,但我不明白为什么,谁能给我一个建议做什么?

    private void button2_Click(object sender, EventArgs e)
    {
        int n = Convert.ToInt32(textBox16.Text);
        int t = Convert.ToInt32(textBox17.Text);
        matrix.CalculeazaQR(n, t);
        string temp;
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                temp = matrix.q[i, j].ToString("0.00");
                if (j % (n - 1) == 0)
                    temp += "'n";
                temp += ",";
            }
        }
        textBox3.Text = temp;
    }

使用未赋值的局部变量(字符串)出错

您在for循环中分配temp,编译器无法确定您是否会进入循环。您可以像这样初始化顶部的temp:

string temp = string.Empty;
循环中的

语句只有在条件为真时才会执行,并且编译器在编译时无法确定条件是否为真,它会认为temp仍然未赋值,因此会出现错误。

这样放:

string temp="";

你必须在实际使用它之前将string(或任何变量)赋值为empty或其他东西

"谁能给我点建议?"
初始化文本:

string temp = string.Empty;

编译器无法知道temp(在textBox3.Text = temp;上使用)在循环之后是否有一个值(例如,当n <1) .

首先,你的循环开始时被打破-只有最后一次迭代才重要(即当ij都是n - 1时),因为你正在完全取代temp的值。

但是编译器不知道n是正的——它不知道你会进入循环。一般来说,编译器永远不会假定你进入if语句体、for语句体、while语句体或foreach循环体——因此,在这些语句体中进行的任何赋值都不会影响局部变量是否在语句末尾被明确赋值。在读取一个局部变量之前,必须明确地赋值它(就像你在方法的末尾所做的那样)。

我怀疑你实际上想要一个StringBuilder,你在循环中追加:

StringBuilder builder = new StringBuilder();
for (...)
{
    for (...)
    {
        builder.AppendFormat("{0:0.00},", matrix.q[i, j]);            
    }
    builder.Append("'n");
}
textBox3.Test = builder.ToString();