C#List <string>仅打印最后一个元素

时间:2019-03-16 12:18:20

标签: c# .net string visual-studio

我是C#的新手,并感谢我能获得的所有帮助。 我有一个问题要打印列表中的所有元素,但是我只得到最后一个元素作为输出。如果我使用“ + =”而不是“ =”,那么我将所有元素都视为一行,这是我不喜欢的。

如何在其自己的行上打印所有元素?

代码:

  public override string ToString()
  {        
        string combindedstring = string.Empty;

        foreach (string array in foodDescriptionList)
        {
            combindedstring = array;
        }      

        return combindedstring;
    }

我也是这个网站的新手。如果有什么不适合我的问题,请告诉我。感谢您的所有帮助:)。

4 个答案:

答案 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;
        }