为什么这段代码只从列表中输出一个元素?
private void button3_Click(object sender, EventArgs e)
{
Tasks dosomething = new dosomething();
dosomething.calculate();
foreach(float num in dosomething.Display())
{
richTextBox1.Text = num.ToString();
}
}
dosomething.Display()
返回List<float> list;
,其中包含10个浮点数。
答案 0 :(得分:2)
您需要使用
richTextBox1.Text += num.ToString();
通过你正在做的事情,只会显示最后一个项目。
更好的方法是使用StringBuilder
StringBuilder sb = new StringBuilder();
foreach (float num in dosomething.Display())
{
sb.Append(num.ToString() + Environment.NewLine);
}
richTextBox1.Text = sb.ToString();
答案 1 :(得分:0)
每次运行代码进入foreach循环时,
richTextBox1.Text = num.ToString();
清除richTextBox1并将num.ToString()插入其中。下次执行该foreach循环中的代码时,内容将再次替换。
我认为您在此处尝试追加结果。有很多方法可以做到这一点。例如,您可以轻松地将之前的语句重构为:
richTextBox1.Text += num.ToString();
请注意 + =运算符:+ =表示附加到。因此,richTextBox1.Text = richTextBox1.Text + num.ToString();
当然,您还可以添加空格以使其看起来漂亮......
richTextBox1.Text += num.ToString()+" ";
或者,正如旁观者所说,你可以使用StringBuilder 。 StringBuilder是一个非常有效的类,用于操作字符串而不需要使用常规字符串类来执行此操作。此外,下面的代码(与astander的代码非常相似,因为它们本质上以相同的方式起作用)仅更新用户界面上的richTextBox1 ,而不是列表中每个元素的一次
StringBuilder代码:
StringBuilder sbuilder = new StringBuilder(); //default StringBuilder() constructor
foreach (float num in dosomething.Display())
{
sb.Append(num.ToString() + " ");
}
//Foreach loop has ended - this means all elements of the list have been iterated through
//Now we set the contents of richTextBox1:
richTextBox1.Text = sb.ToString();
请注意,在foreach循环中,我们通过StringBuilder.Append()方法附加到StringBuilder。
然后,当然,您可以再次更改输出浮动之间出现的内容。我只是在(“”)中放了一个空格。
因此,要回答您的问题,只会出现一个,因为您每次都要设置值,而不是追加。设置值时,将丢弃先前的值。
希望我帮忙!
P.S。刚刚在代码中看到一个奇怪的小东西:
Tasks dosomething = new dosomething();
你确定它不会是:
Tasks dosomething = new Tasks();
但这与你的问题无关。