0

所以我在文本框分配中收到这个错误,但我不明白为什么,谁能给我一个关于该怎么做的建议?

    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;

    }
4

4 回答 4

5

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

string temp = string.Empty;

只有条件为真且编译器在编译时无法确定条件是否为真时,循环内的语句才会执行,它会认为 temp 保持未分配,因此出现错误。

于 2013-03-26T10:30:30.407 回答
2

像这样放:

string temp="";

在实际使用它之前,您必须将字符串(或任何变量)分配为空或其他内容。

于 2013-03-26T10:30:37.000 回答
1

“任何人都可以给我一个建议吗?”
好吧,初始化文本:

string temp = string.Empty;

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

于 2013-03-26T10:30:36.953 回答
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();
于 2013-03-26T10:32:02.593 回答