StringBuilder類的Capacity屬性和Length屬性
StringBuilder 類表示可變字元的字串。
名稱
說明
Capacity屬性
獲取或設定可包含在當前例項所分配的記憶體中的最大字元數
Length屬性
獲取或設定當前 StringBuilder 物件的長度
StringBuilder 類Capacity屬性的預設值為16。
StringBuilder sb = new StringBuilder();
Console.WriteLine("Length屬性:" + sb.Length + "Capacity屬性:" + sb.Capacity);
Console.ReadLine();
當StringBuilder 物件的Length屬性值超過Capacity屬性的長度時,StringBuilder 物件內部會重新構造一個字元陣列。Capacity屬性會變為以前的2倍。例如:Capacity屬性的預設值為16,當追加字串的長度超過16時,Capacity屬性會擴充為32。
StringBuilder sb = new StringBuilder();
//追加長度為17的字串
sb.Append("01234567890123456");
Console.WriteLine("Length屬性:" + sb.Length + " Capacity屬性:" + sb.Capacity);
Console.ReadLine();
如果給Capacity屬性設定一個值的話,當追加字串的長度超過Capacity屬性時,Capacity屬性會變為所設定值的2倍。
StringBuilder sb = new StringBuilder();
//設定Capacity屬性的值為10
sb.Capacity = 10;
//追加長度為17的字串
sb.Append("01234567890123456");
Console.WriteLine("Length屬性:" + sb.Length + " Capacity屬性:" + sb.Capacity);
Console.ReadLine();
當StringBuilder 物件的Length屬性超過Capacity的2倍時,不管有沒有設定過Capacity屬性的值,最終Capacity屬性會和Length屬性相同。
StringBuilder sb = new StringBuilder();
//追加長度為33的字串
sb.Append("012345678901234567890123456789012");
Console.WriteLine("Length屬性:" + sb.Length + " Capacity屬性:" + sb.Capacity);
Console.ReadLine();
StringBuilder sb = new StringBuilder();
//設定Capacity屬性的值為10
sb.Capacity = 10;
//追加長度為21的字串
sb.Append("012345678901234567890");
Console.WriteLine("Length屬性:" + sb.Length + " Capacity屬性:" + sb.Capacity);
Console.ReadLine();
我們在構造StringBuilder物件時,最好先預估下追加字串的總長度,根據這個總長度,在StringBuilder建構函式中設定一下Capacity引數。這樣避免字串的長度超過Capacity時,StringBuilder物件會重新擴充構造內部的字元陣列,影響效能。