このコードはどうかと思います...
StringBuilder sb = new StringBuilder("Please read the following messages.");
...sb
コンストラクターに渡された文字列とまったく同じ大きさのバッファーで初期化します。一方で、これは最も論理的なことのように思えます。一方で、StringBuilder
クラスの最も一般的な用途の 1 つであるクラスの目的、つまり繰り返し追加をより効率的にするための可変性を提供するという目的に反しているように見えます。Append
(私の質問に対する答えが「はい」の場合、への最初の呼び出しは、sb
それ自体のサイズを変更する必要があります。)
もう一度言いますが、これは をパラメーターとしてList<T>
取るコンストラクターに類似していると見なすことができると思いIEnumerable<T>
ます。おそらく、この場合の前提は、多くの追加を計画しているのではなく、既に存在するものを操作することを計画しているということです。
これについて私が行った唯一の実際の調査は、 StringBuilder に関する MSDN ドキュメントを確認することでしたが、これは答えを提供しませんでした (コンストラクターが「指定された文字列を使用して」インスタンスを初期化すると述べていますが、文字列がどのように機能するかは示していません)。使用済み)。
編集:それは「実装固有」です...これは他の誰にも奇妙に見えませんか?つまり、クラスの目的は、 で多くの操作を実行する代わりに、途中で大量の不変インスタンスを作成するStringBuilder
代替手段を提供することです。したがって、効率のためです。プラットフォームに関係なく、開発者が情報に基づいて使用方法を決定できるように、このコンストラクターの動作を指定する必要があると思います。string
string
つまり、Microsoft によって特定の方法で実装されています。彼らはそれをドキュメントに簡単に入れることができたでしょう(他の実装に追随を強いる)。困惑の個人的なソース...