所以我在文本框分配时遇到这个错误,但我不明白为什么,有人可以给我一个关于该做什么的建议吗?
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;
}
答案 0 :(得分:5)
您在for循环中分配temp
,编译器无法确定您是否进入循环内部。您可以在顶部初始化temp
,如:
string temp = string.Empty;
循环内的语句只有在条件为真并且编译时编译器无法确定条件是否为真时才会执行,它会认为temp保持未分配,因此错误。
答案 1 :(得分:2)
这样说:
string temp="";
在实际使用之前,你必须将字符串(或任何变量)指定为空或其他东西。
答案 2 :(得分:1)
“任何人都可以就我该做什么给我一个建议吗?”
好吧,初始化文字:
string temp = string.Empty;
编译器无法知道temp(在textBox3.Text = temp;
上使用)是否在循环之后有一个值(例如,当n <1时)。
答案 3 :(得分:1)
首先,你的循环一开始就被打破 - 只有最后一次迭代才会重要(即当i
和j
都是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();