StringBuilder作爲一個快速的字符串操作工具而不僅僅是串聯字符串。不管這是否是真的,我仍然想知道StringBuilder操作的結果以及它們產生的字符串。StringBuilder字符串是不可變的嗎?
Reflector中的一個簡短短語顯示StringBuilder.ToString()並不總是返回一個副本,有時它似乎返回內部字符串的一個實例。它似乎也使用一些內部函數來操縱內部字符串。
那麼,如果我這樣做,我會得到什麼?
string s = "Yo Ho Ho";
StringBuilder sb = new StringBuilder(s);
string newString = sb.ToString();
sb.Append(" and a bottle of rum.");
string newNewString = sb.ToString();
是newString和newNewString不同的字符串實例還是一樣的?我試圖通過反射器瞭解這一點,而我只是不完全瞭解所有事情。
這段代碼如何?
StringBuilder sb = new StringBuilder("Foo\n");
StringReader sr = new StringReader(sb.ToString());
string s = sr.ReadLine();
sb.Append("Bar\n");
s = sr.ReadLine();
最後一條語句是否返回null或「Bar」?如果它返回一個或另一個,這是定義的還是未定義的行爲?換句話說,我可以依靠它嗎?
該文檔在這個主題上非常簡潔,我不願意依賴於觀察到的行爲超過規範。
請注意,自問題被回答後,StringBuilder的實現已經發生了變化。 – mayu 2016-02-16 13:13:43