无法在StringBuilder中打印新行

时间:2013-11-28 19:02:33

标签: c# for-loop stringbuilder generic-list

我正在尝试遍历列表并在新行上打印每个对象但是我似乎无法跳过一行。

以下是代码:

private String displayProducts()
    {
        string header = "ID\tItem\tCategory\tPrice\tPrice\tStock";
        StringBuilder productsList = new StringBuilder(header);
        lstProducts_Load();
        for (int i = 0; i < products.Count(); i++)
        {
            productsList.AppendLine(products.ElementAt(i).Display());
            productsList.AppendLine();
        }
        return productsList.ToString();
    }

有什么建议吗?

2 个答案:

答案 0 :(得分:2)

使用String.Join(string separator, IEnumerable values)将产品与新行分隔符连接起来(内部使用StringBuilder):

 header + String.Join(Environment.NewLine, products.Select(p => p.Display())

如果您希望第一个产品位于新行,请考虑将\n添加到标题的末尾。

答案 1 :(得分:0)

你是如何展示它的?使用您的代码,它可以在文本框或标签中正确显示。

然而,列表框是另一个故事。你最好直接使用LINQ:

        listBox1.Items.Add("ID\tItem\tCategory\tPrice\tPrice\tStock");
        listBox1.Items.AddRange((from p in products
                                 from s in new string[] { p.Display(), "" }
                                 select s).ToArray());

这会将Display输出添加到列表框中,并在它们之间添加一个额外的空行。