为什么字符串列表上的C#循环很奇怪? 我不认为自己是世界上最伟大的开发者,但我想我至少可以循环一个字符串列表!

为什么字符串列表上的C#循环很奇怪? 我不认为自己是世界上最伟大的开发者,但我想我至少可以循环一个字符串列表!,c#,list,loops,C#,List,Loops,以下是我的功能: public string liststrings() { List<string> strings = new List<string>(); strings.Add("First"); strings.Add("Second"); strings.Add("Third"); string output = string.Empty; for

以下是我的功能:

    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;
    }
公共字符串列表字符串(){
列表字符串=新列表();
字符串。添加(“第一”);
字符串。添加(“第二”);
字符串。添加(“第三”);
字符串输出=string.Empty;
对于(int i=0;i”;
}
返回输出;
}
此函数返回以下html:

First<br />
First<br />
Second<br />
First<br />
First<br />
Second<br />
Third<br />
首先
首先
第二个
首先
首先
第二个
第三个
额外的迭代从何而来

仅供参考:我来自一个主要的VB脚本背景,我可以用VB脚本中的数组毫无问题地完成这项工作。列表和C#语法有什么不同,它们会弄脏这一点


谢谢您的帮助。

您添加了两次输出

output += output + strings[i] + "<br />";
output+=output+strings[i]+“
”;
相当于:

output = output + output + strings[i] + "<br />";
output=output+output+strings[i]+“
”;
您可以使用:

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

更好的选择可能是
StringBuilder

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

output += output + strings[i] + "<br />";
output+=output+strings[i]+“
”;
我想你想要

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

output+=strings[i]+“
”;

但老实说,从您正在做的事情来看,我会看看这个类。

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

output += strings[i] + "<br />";
output+=strings[i]+“
”;
您应该删除
字符串.Count之后的()。此外,您还可以使用

foreach(string str in strings)
{
    // etc.
}
此外,如其他帖子所述,您将添加两次输出:

output += output + "something"
相当于

output = output + output + "something"

建议使用
StringBuilder
对象,而不是串联字符串

...
StringBuilder sb = new StringBuilder();
for( int i = 0; i < strings.Length; i++)
{
    sb.WriteLine("{0}<br />", strings[i]);
}
return sb.ToString();
。。。
StringBuilder sb=新的StringBuilder();
for(int i=0;i”,字符串[i]);
}
使某人返回字符串();

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

每隔一段时间,有一个问题我都不会回答,即使答案对我来说很明显-在我完成回答时,它会有十个答案:)哦,天哪。。。我很笨。。。漫长的一天结束了…漫长的一周。准备回家了!谢谢大家的帮助。我要说的是,这个循环并不奇怪,它完全是按照你的要求做的。:)是 啊我只是不习惯C#s+=赋值运算符。有趣的是,我甚至不想建立一个字符串。我只是想确保我的表单被正确绑定到modl。。。哈哈,我想这个答案是第一个。。。所以勾选。谢谢你的帮助。。。有点尴尬……在我看来,哪一个答案第一并不重要,关键是谁最好。然而,在本例中,这并不重要,因为第一个也是非常好的:)@quakkels您还可以使用
string output=string.Concat(strings.Select(s=>s+“
”)。大多数情况下,最好使用
String.Join
String.Concat
,这样就不必为变量编写循环或在
String
StringBuilder
之间进行选择。
...
StringBuilder sb = new StringBuilder();
for( int i = 0; i < strings.Length; i++)
{
    sb.WriteLine("{0}<br />", strings[i]);
}
return sb.ToString();