Tôi tự hỏi nếu mã này ...Một StringBuilder được khởi tạo với một chuỗi chứa chính xác (chỉ) đủ không gian cho chuỗi đó?
StringBuilder sb = new StringBuilder("Please read the following messages.");
... khởi sb
với một bộ đệm chính xác lớn như chuỗi truyền cho constructor. Một mặt, điều này có vẻ là điều hợp lý nhất. Mặt khác, nó dường như đánh bại mục đích của lớp học StringBuilder
cho một trong những cách sử dụng phổ biến nhất của nó, đó là cung cấp khả năng biến đổi để làm cho các phụ thêm lặp lại hiệu quả hơn. (Cuộc gọi đầu tiên để Append
, nếu câu trả lời cho câu hỏi của tôi là "có", sẽ đòi hỏi sb
để thay đổi kích thước của chính nó.)
Sau đó, một lần nữa, tôi cho rằng người ta có thể xem đây là tương tự như các nhà xây dựng cho List<T>
mà phải mất một IEnumerable<T>
làm tham số. Có thể giả định trong trường hợp này là bạn không lập kế hoạch trên gắn thêm nhiều, nhưng thay vào đó là thao tác những gì đã có ở đó. Các nghiên cứu thực tế duy nhất tôi đã thực hiện trên này là để kiểm tra các MSDN documentation on StringBuilder, mà không cung cấp một câu trả lời (nó nói constructor khởi tạo dụ "sử dụng chuỗi quy định," nhưng không chỉ cách chuỗi được sử dụng).
EDIT: Vì vậy, nó được "thực hiện cụ thể" ... Điều này có vẻ không lạ với bất cứ ai khác? Ý tôi là, mục đích của lớp StringBuilder
là cung cấp cách thay thế để thực hiện nhiều thao tác trên string
, tạo ra một tấn các trường hợp bất biến string
trên đường đi; do đó, nó cho hiệu suất . Tôi cảm thấy hành vi của nhà xây dựng này nên được chỉ định, để nhà phát triển có thể đưa ra quyết định sáng suốt về cách sử dụng nó bất kể nền tảng.
Ý tôi là, là được Microsoft triển khai theo cách nhất định; họ có thể dễ dàng đặt nó vào tài liệu (buộc các triển khai khác phải tuân theo). Chỉ là một nguồn cá nhân của sự bối rối ...
Tốt cuộc gọi - tôi j chúng tôi đã tự kiểm tra điều này và đạt được kết luận tương tự (bằng cách kiểm tra thuộc tính 'Dung lượng' sau khi khởi tạo ... bằng cách nào đó điều này không xảy ra với tôi cho đến sau khi tôi đăng câu hỏi). –
... nhưng bạn không nên dựa vào điều này. Nếu bạn quan tâm đủ về công suất cần thiết để đăng câu hỏi trên Stack Overflow, bạn chỉ nên sử dụng một trong những tình trạng quá tải mà bạn có thể chỉ định nó. Toàn bộ mục đích của "thực hiện cụ thể" có nghĩa là nó có thể thay đổi trong tương lai. Đừng dựa vào hành vi không có giấy tờ. –
@Lasse - Ồ, đồng ý. Tôi sẽ không ủng hộ * dựa vào * về chi tiết này. (Và đấu tranh để suy nghĩ làm thế nào bạn có thể kết thúc dựa vào thực tế này) –