使用for循环在列表中打印项目

时间:2014-04-15 15:53:10

标签: c#

我想构建制表符分隔的购物车内容字符串。我使用for循环遍历列表,以便输出购物车中的项目,但只输出该列表中的最后一项。

public string Display()
{
    CartClass CartList = CartClass.GetCart();
    String display = "" ;

    for (int i = 0; i < CartList.CartList.Count(); i++)
    {
        Movies Movie = CartList.CartList[i];
        display = String.Format(i + 1 + "." + "\t" + 
           Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString());
    }
    return display;
}

我该如何解决这个问题?

旁注:最终我会用它在网页上显示,但此时我想了解为什么它不会返回所有项目的文本。

9 个答案:

答案 0 :(得分:12)

您只能看到最后一个,因为您在每次循环迭代中都要进行分配。您需要+=代替=

public string Display()
{
    CartClass CartList = CartClass.GetCart();
    String display = "" ;

    for (int i = 0; i < CartList.CartList.Count(); i++)
    {
        Movies Movie = CartList.CartList[i];
        display += String.Format(i + 1 + "." + "\t" + 
            Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()) + "\n";
    }
    return display;
}

请注意,通常最好使用StringBuilder来构建大字符串。

答案 1 :(得分:8)

你真的应该在这里使用StringBuilder

System.Text.StringBuilder sb = new StringBuilder();
for (int i = 0; i < CartList.CartList.Count(); i++)
{
    Movies Movie = CartList.CartList[i];
    sb.Append( String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString()));
}
return sb.ToString();

答案 2 :(得分:3)

正如其他答案所指出的那样,您需要使用Concatnation运算符+附加字符串,我建议您使用StringBuilder

StringBuilder sb = new StringBuilder();
for (int i = 0; i < CartList.CartList.Count(); i++)
    {
        Movies Movie = CartList.CartList[i];
        sb .Append(String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString());
    }
    return sb.ToString();

答案 3 :(得分:2)

您正在使用循环中的下一项替换变量的值...尝试添加它。

display += String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString());

答案 4 :(得分:2)

您正在使用=符号来设置您需要使用的显示文本+ =或字符串构建器类。

答案 5 :(得分:2)

您正在覆盖显示变量。尝试连续+=

答案 6 :(得分:2)

您需要连接每个条目以显示如下(注意+=):

public string Display()
{
    CartClass CartList = CartClass.GetCart();
    String display = "" ;

    for (int i = 0; i < CartList.CartList.Count(); i++)
    {
        Movies Movie = CartList.CartList[i];
        display += String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString());

    }
    return display;
}

答案 7 :(得分:2)

您在每个循环中覆盖display

最简单的更改是将=更改为+=

    //      V-----
    display += String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString());

但如果你有很多字符串,你可能会发现StringBuilder更高效。

答案 8 :(得分:1)

我想你想要这个。

public string Display()
{
CartClass CartList = CartClass.GetCart();
String display = "" ;

for (int i = 0; i < CartList.CartList.Count(); i++)
{
    Movies Movie = CartList.CartList[i];
    display += String.Format(i + 1 + "." + "\t" + Movie.MovieName + "\t" + "£" + Movie.MovieCost.ToString());
}
return display;
}