我是C#的新手,并感谢我能获得的所有帮助。 我有一个问题要打印列表中的所有元素,但是我只得到最后一个元素作为输出。如果我使用“ + =”而不是“ =”,那么我将所有元素都视为一行,这是我不喜欢的。
如何在其自己的行上打印所有元素?
代码:
public override string ToString()
{
string combindedstring = string.Empty;
foreach (string array in foodDescriptionList)
{
combindedstring = array;
}
return combindedstring;
}
我也是这个网站的新手。如果有什么不适合我的问题,请告诉我。感谢您的所有帮助:)。
答案 0 :(得分:7)
您可以使用string.Join()
并一起避免循环。
使用下面的选项将每个条目放在自己的行上(使用Environment.NewLine
):
// return list separated by new line character
public override string ToString()
{
return string.Join(Environment.NewLine, foodDescriptionList);
}
下面的代码是另一个选项,它将使用,
分隔每个项目:
// return list separated by ,
public override string ToString()
{
return string.Join(", ", foodDescriptionList);
}
在string.Join
以上的重载中,有2个参数:string.Join(separator, array)
。微软文档是here。
答案 1 :(得分:1)
问题在于您在每次循环迭代中都会覆盖先前的值,因此最后您只能从集合中获取最后的值。而是使用StringBuilder
并将每个元素附加到该元素。
public override string ToString()
{
StringBuilder sb = new StringBuilder();
foreach (string array in foodDescriptionList)
{
sb.AppendLine(array); //sb.AppendJoin(", ", array); if you want to add separator
}
return sb.ToString();
}
有很多解决方案,但是这一解决方案着重于代码的问题。
答案 2 :(得分:0)
您可以使用+ =并在末尾添加换行符,如下所示:
combindedstring + = array + Environment.NewLine;
答案 3 :(得分:-1)
当您编写combindedstring = array时;这意味着在每次迭代中,“ combindedstring”应等于当前数组项。 如果希望它包含所有数组项,请按如下所示更改代码:
foreach (string array in foodDescriptionList)
{
combindedstring += array + Environment.NewLine;
}