2010-11-19 95 views
0

我不认为自己是世界上最伟大的开发人员,但我认为我至少可以遍历一系列字符串!为什么这个C#遍历字符串列表很奇怪?

这里是我的功能:

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#语法对此有什么不同?

感谢您的任何帮助。

+1

每过一段时间,有一个问题,尽管答案似乎很明显我,我甚至不回答 - 这将有十个答案由我完成我的答案:) – delnan 2010-11-19 23:26:57

+1

哦,天啊......我哑时间......漫长的一天结束......漫长的一周。准备回家!感谢大家的帮助。 – quakkels 2010-11-19 23:28:10

+0

为了清楚起见,循环并不奇怪,它完全按照你所说的去做。 :) – ChaosPandion 2010-11-19 23:28:38

回答

7

您正在添加输出两次。

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

等同于:

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

你可以使用:

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

一个更好的选择可能是一个StringBuilder

+1

我觉得这个答案是第一个...所以选中标记。感谢您的帮助...有点尴尬... – quakkels 2010-11-19 23:29:24

+0

imo,无论哪个答案是第一,这是谁最好。在这种情况下,但是,它并不重要,因为第一个也是一个非常好的一个:) – 2010-11-20 06:42:10

+0

@quakkels你也可以使用'字符串输出= string.Concat(strings.Select(S => S +“
”) );'。大多数情况下,最好使用String.Join或String.Concat,然后您不必为该变量编写循环或在“String”和“StringBuilder”之间进行选择。 – 2012-06-09 08:16:44

2

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

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

我想你想

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

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

不过说实话,从你在做什么,我会看着StringBuilder类。

7

您在每次迭代增加了整个字符串返回到自身,而不是尝试以下操作:

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

你应该在()后strings.Count删除。此外,您还可以使用

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

此外,如其他职位提到,要添加输出两次:

output += output + "something" 

相当于

output = output + output + "something" 
1

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

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

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