1. 程式人生 > >StringBuilder類的Capacity屬性和Length屬性

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物件會重新擴充構造內部的字元陣列,影響效能。