StringBuilderが確保するバッファの最大容量を指定することも出来ます。 最大容量を指定するには、コンストラクタで指定する必要があります。 特に指定しない場合は初期値Int32.MaxValue(2,147,483,647)が最大容量に指定されます。 インスタンスの最大容量はMaxCapacityプロパティで取得することが出来ます。
文字列を追加しようとしたときやバッファのサイズを変更しようとしたときなど、確保しようとしているバッファの容量が最大容量を超える場合は例外ArgumentOutOfRangeExceptionがスローされます。
StringBuilderのバッファの最大容量を指定する
using System;
using System.Text;
class Sample {
static void Main()
{
// 容量24のバッファを確保し、最大容量に32を指定してインスタンスを作成
var sb = new StringBuilder(24, 32);
Console.WriteLine("MaxCapacity: {0}", sb.MaxCapacity);
Console.WriteLine("(Length={1}, Capacity={2}) <{0}>", sb, sb.Length, sb.Capacity);
// 文字列を追加
sb.Append("The quick brown fox");
Console.WriteLine("(Length={1}, Capacity={2}) <{0}>", sb, sb.Length, sb.Capacity);
// 追加することで最大容量を超える長さの文字列を追加
try {
sb.Append(" jumps over the lazy dog");
}
catch (ArgumentException) {
Console.WriteLine("ArgumentException!!");
}
Console.WriteLine("(Length={1}, Capacity={2}) <{0}>", sb, sb.Length, sb.Capacity);
}
}
実行結果
MaxCapacity: 32 (Length=0, Capacity=24) <> (Length=19, Capacity=24) <The quick brown fox> ArgumentException!! (Length=19, Capacity=19) <The quick brown fox>