2010-11-19 60 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屬性純數組,因爲它更快。