代码之家  ›  专栏  ›  技术社区  ›  quakkels

为什么这个C#循环在字符串列表上是奇怪的?

  •  0
  • quakkels  · 技术社区  · 14 年前

    我不认为自己是世界上最伟大的开发人员,但我想我至少可以循环一个字符串列表!

    这是我的功能:

        public string liststrings() {
    
            List<string> strings = new List<string>();
            strings.Add("First");
            strings.Add("Second");
            strings.Add("Third");
    
            string output = string.Empty;
    
            for (int i = 0; i < strings.Count(); i++ )
            {
                output += output + strings[i] + "<br />";
            }
    
            return output;
        }
    

    此函数返回以下html:

    First<br />
    First<br />
    Second<br />
    First<br />
    First<br />
    Second<br />
    Third<br />
    

    额外的迭代从何而来?

    仅供参考:我来自一个主要的VB脚本背景,我可以这样做与一个数组在VB脚本没有问题。列表或C语法有什么不同吗?

    谢谢你的帮助。

    5 回复  |  直到 12 年前
        1
  •  7
  •   Matthew Flaschen    14 年前

    您将添加两次输出。

    output += output + strings[i] + "<br />";
    

    相当于:

    output = output + output + strings[i] + "<br />";
    

    您可以使用:

    output += strings[i] + "<br />";
    

    更好的选择可能是 StringBuilder .

        2
  •  7
  •   Tim Lloyd    14 年前

    在每次迭代中都要将整个字符串添加回自身,请尝试以下操作:

    output += strings[i] + "<br />";
    
        3
  •  2
  •   linuxuser27    14 年前

    额外的迭代来自于您将先前的输出值附加到自身两次的事实。

    output += output + strings[i] + "<br />";
    

    我想你想要

    output = output + strings[i] + "<br />";
    

    output += strings[i] + "<br />";
    

    但老实说,从你的所作所为来看 StringBuilder 上课。

        4
  •  1
  •   John Alexiou    14 年前

    建议使用 StringBuilder 对象而不是连接字符串。

    ...
    StringBuilder sb = new StringBuilder();
    for( int i = 0; i < strings.Length; i++)
    {
        sb.WriteLine("{0}<br />", strings[i]);
    }
    return sb.ToString();
    

    注意使用 .Length 纯数组的属性,因为它更快。

        5
  •  0
  •   Mark Avenius    14 年前

    你应该在 strings.Count . 另外,你可以使用

    foreach(string str in strings)
    {
        // etc.
    }
    

    另外,正如在其他文章中提到的,您将添加两次输出:

    output += output + "something"
    

    相当于

    output = output + output + "something"