StringBuilder被认为是比简单字符串连接更快的字符串操作工具。无论真假如何,我想知道StringBuilder操作的结果和它们产生的字符串。
快速查看反编译器可以发现,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"?如果返回其中之一,这是定义好的还是未定义的行为?换句话说,我能依赖它吗?
关于这个问题,文档非常简洁,因此我不愿意仅凭观察到的行为来进行依赖。