2016-09-07 56 views
1

我想重複.- 40倍,並將其保存到一個string使用StringBuilder重複使用StringBuilder的

爲什麼這個不行的字符串?

string result = new StringBuilder("").Append(".-",0,40).ToString(); 

我知道other解決方案,但我想用StringBuilder

+0

使用循環並添加40倍相同的常數 – Steve

+2

這不是'Append'的工作方式。你告訴它附加一個子字符串不要重複該字符串。具體來說,最後一個參數實際上是子字符串的長度。他們給了它'count'的不幸的名字。 – juharr

回答

6

這種方法沒有做什麼,你認爲它。 2個int參數指定要追加的子串的起始索引和長度。

StringBuilder確實有你想要的東西的方法:這就是所謂的Insert

sb.Insert(0, ".-", 40); 
+0

是的,這是長度。像這樣的方法令人困惑。在一些方法中,第二個int表示結束索引,在其他方法中它表示長度。編輯。 –

+0

大多數C#庫的開始和結束時間都與Java的開始和結束一致。在這種情況下,它更糟,因爲他們命名了最後一個參數'count'。 – juharr

+0

@juharr'Parallel.ForEach'例如使用開始和結束......我想我更喜歡那個。 「從20到50的所有數字」對我來說比「從20開始的30個數字」 –

1
StringBuilder sb = new StringBuilder(); 
for (int i = 0; i < 40; i++) 
{ 
    sb.Append(".-"); 
} 
MessageBox.Show(sb.ToString()); 
+1

轉儲代碼很少用於OP和未來的讀者,我也解釋了他爲什麼不用一個空字符串初始化StringBuilder,爲什麼他用Append()的解決方案是錯誤的,爲什麼他可能希望將初始容量設置爲80以及這是如何與插入()不同... –

0

如果你想重複一個字符串,你的選擇是幾次:

1使用循環(如指出通過@ Balagurunathan的答案)

2-對於單個字符,你可以使用:

string result = new string('a', 10); //aaaaaaaaaa 

對於多個字符的字符串:

string result = string.Join("", Enumerable.Repeat(".-", 5)) //.-.-.-.-.- 

所以我相信你試圖做的是沿着這些路線的東西:

string result = new StringBuilder().Append(string.Join("", Enumerable.Repeat(".-", 40))).ToString(); 

但是我會堅持到循環在性能方面