StringBuilder có một danh tiếng như là một công cụ thao tác chuỗi nhanh hơn so với chỉ đơn giản là nối chuỗi. Cho dù điều đó có đúng hay không, tôi vẫn tự hỏi về kết quả của các hoạt động của StringBuilder và các chuỗi chúng tạo ra.Chuỗi StringBuilder có thay đổi không?
Một cách nhanh chóng jaunt vào Reflector cho thấy rằng StringBuilder.ToString() không phải luôn luôn trả về một bản sao, đôi khi nó dường như trả về một thể hiện của chuỗi nội bộ. Nó cũng có vẻ sử dụng một số chức năng nội bộ để thao tác các chuỗi nội bộ.
Vì vậy, tôi phải làm gì nếu tôi làm điều này?
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();
Có phải newString và newNewString trường hợp chuỗi khác nhau hoặc giống nhau không? Tôi đã cố gắng để tìm ra điều này thông qua phản xạ, và tôi chỉ không hoàn toàn hiểu mọi thứ.
Làm thế nào về mã này?
StringBuilder sb = new StringBuilder("Foo\n");
StringReader sr = new StringReader(sb.ToString());
string s = sr.ReadLine();
sb.Append("Bar\n");
s = sr.ReadLine();
Câu lệnh cuối cùng sẽ trả về null hoặc "Bar"? Và nếu nó trả về một hoặc khác, thì hành vi được xác định hoặc không xác định này? Nói cách khác, tôi có thể dựa vào nó?
Tài liệu này rất đáng kể về chủ đề này và tôi không muốn dựa vào hành vi được quan sát theo đặc điểm kỹ thuật.
Xin lưu ý rằng việc triển khai StringBuilder đã thay đổi kể từ khi câu hỏi này được hỏi và trả lời. – mayu