2011-04-27 60 views
3
string s = "value_test_this"; 
string m = s.Replace('e','E'); 

StringBuilder strBuilder = new StringBuilder("value_test_this"); 
strBuilder.Replace('e','E'); 

因爲字符串是不可變的,請問怎麼在string類的Replace作品,字符串類替換和StringBuilder的替代

+0

檢查這篇文章會解釋你想要[爲什麼要使用StringBuilder在字符串來獲得更好的性能]的東西給你(HTTP:/ /pranayamr.blogspot.com/2011/02/why-to-user-stringbuilder-over-string.html) – 2011-04-27 08:11:41

回答

2

如果你做一個與string.replace它只是要創建一個新的字符串(因爲,如你說,它是不可改變的)。在StringBuilder中沒有創建新的字符串,你得到了修改。

5

它在內存中創建另一個字符串,然後將m指向該新字符串。舊的字符串也停留在內存中。

而這正是爲什麼StringBuilder應該使用如果頻繁修改字符串。

如果你想知道爲什麼字符串是在C#中一成不變的,看this SO discussion

+0

爲什麼s被指向新的字符串? – Raghav55 2011-04-27 08:14:33

+0

這是錯誤的 - 's'肯定不*指向新的字符串。 'Replace'方法和許多其他字符串方法一樣,基於某種邏輯創建一個全新的字符串,並返回這個新的字符串。 's'保持不變。變量'm'是對新字符串的引用。你需要在你的答案中用'm'替換's'。 – 2011-04-27 08:22:41

+0

@Graham Clark:你說的對。糾正。 – Aamir 2011-04-27 08:26:26