C#中的StringBuilder是什麼

WBOY
發布: 2024-09-03 15:22:23
原創
984 人瀏覽過

下面的文章什麼是 C# 中的 StringBuilder 提供了 C# 中的 StringBuilder 的概述。在討論StringBuilder 之前,讓我們先看看不可變性的概念,如果您熟悉字串,那麼您可能會知道字串具有不可變的性質,即每次創建新物件並為其提供新的記憶體位置時,因此每當發生資料變更時,更改的資料將被放置到新的記憶體位置並保持原始字串的安全。現在,讓我們稍微思考一下。這種方法的用例是什麼?好吧,如果您要設定諸如資料庫詳細資訊之類的憑證,以及在瞬態時間內不會更改的其他憑證,那麼您可以使用 String 來確保它們的安全。現在出現了另一個對象,所謂的 StringBuilder,本質上是可變的,因此透過允許您僅修改當前記憶體位置中的資料來節省記憶體。當您希望進行多個附加操作時,這些東西會派上用場。

C# 中 StringBuilder 的定義

StringBuilder 是一個表示可變字元集的類,它是 System 的一個物件。文字命名空間。 StringBuilder 基本上是一個動態對象,因此 StringBuilder 不會在記憶體中建立新對象,而是動態擴展所需的記憶體以合併修改後的或新的字串。字串建構器在多執行緒環境中顯得不那麼令人信服,因為如果多執行緒概念未正確使用,它們在被多個執行緒寫入時可能會導致資料不一致。

了解 StringBuilder

1.現在我們應該了解可變性會導致什麼結果,只有當同一組資料要動態擴展時才應該選擇使用可變性,讓我們舉個例子來理解這種情況。

2.如果您從HTML 表單中獲取一些數據,並將其存儲到基於某些業務邏輯的表中,該表將首先驗證數據,在這種情況下,您可以創建一個StringBuilder 對象並附加所有資料字段,與資料庫的列,最後可以執行插入查詢將所有內容放入資料庫中,這種方法的優點是始終不應該分配新的記憶體位置。 C# 將透過動態擴展為您管理該記憶體位置。

3.您也可以在C#中指定StringBuilder的數量容量。

StringBuilder s=new StringBuilder(10);
登入後複製
StringBuilder s=new StringBuilder("object value", 15);
登入後複製

4. StringBuilder.length 屬性指示 StringBuilder 物件目前包含的字元數。如果向 StringBuilder 物件添加字符,其長度會增加,直到等於 StringBuilder 的大小。

C# 中的 StringBuilder 如何讓工作變得如此簡單?

C# 中提供了某些方法,這使得使用 StringBuilder 變得容易。 StringBuilder 類別提供了以下方法來簡化開發人員的任務 –

  • Append( String val ) – 用於將物件的字串值追加到目前 StringBuilder 物件的末尾。

範例 –

classStringBuilder a = new StringBuilder("val",10);
a.append("us")
登入後複製

當你執行console.writeline(a)時,它會給你結果「value」

  • Append( Format ) – 用於將輸入字串格式化為指定格式,然後附加它。

範例 –

StringBuilder a = new StringBuilder("val",10);
a.appendFormat("{0:C}",10)
登入後複製

請執行此操作並分析與簡單的append()方法中所做的變化。

  • Insert( int index, string value ) – 在 StringBuilder 物件中的指定索引處插入字串。

範例

StringBuilder a = new StringBuilder("val",10); a.insert(4,"ue")
登入後複製

執行並查看結果

  • 還有其他方法,以及上述方法的許多變體,請參考此連結

StringBuilder 可以做什麼?

  • StringBuilder 有許多屬性、方法和建構子來處理編碼問題,就像我們看到的StringBuilder() 建構子一樣,有一些變體,例如StringBuilder( String, Int32, Int32, Int32 ) – 這將會初始化StringBuilder 類別的新實例來自提到的子字串及其容量。
  • 有長度、容量、最大容量之類的屬性。
  • 有諸如appendLine()、Equals( object )、GetHashCode()、GetType()、Remove( int32, int32 )、Replace( char,char )、toString()等方法。

這些都使得用更少的程式碼行輕鬆地編碼典型業務問題成為了一項任務。

在 C# 中使用 StringBuilder?

  • 透過呼叫 StringBuilder ( Int32, Int32 ) 建構子來實例化 StringBuilder 物件可以使 StringBuilder 實例的長度和容量成長到超過 MaxCapacity 屬性值。主要是當您呼叫 Append ( String ) 和 AppendFormat ( String, Object ) 方法來附加小字串時,可能會發生這種情況。
  • 如果新增的字元數導致StringBuilder物件的長度超過其目前容量,則分配新的內存,將Capacity屬性的值加倍,向StringBuilder物件新增字符,其Length屬性為已調整。
  • 一旦達到最大容量,StringBuilder 物件就不可能進行任何進一步的記憶體分配,並且如果在任何情況下超出其最大容量的擴展,那麼它可能會拋出上述兩個錯誤中的任何一個。

ArgumentOutOfRangeException。
記憶體不足異常。

優點

  • C# 無需處理多個記憶體位置。
  • 動態物件擴充至達到容量。
  • 它可以轉換為字串,反之亦然。

為什麼要在 C# 中使用 StringBuilder?

  • 可以看出,string跟在concat操作之後,StringBuilder跟在append操作之後,append
  • 似乎比 concat 更快,因為 concat 必須分配新的記憶體位置,而這不需要由 StringBuilder 來完成。
  • 如果資料是瞬態的,即非永久性的,並且在不同的呼叫中會有所不同,那麼可以使用 StringBuilder,前提是您沒有使用多線程,否則線程安全將是一個問題。

為什麼 C# 中需要 StringBuilder?

嗯,我們僅在上述幾點中討論了這一點,人們可以在這裡推斷出可以派上用場的用例。

結論

因此,我們看到了字串和 StringBuilder 之間的區別,何時使用什麼以及使用 StringBuilder 時可能出現的挑戰或異常是什麼。

以上是C#中的StringBuilder是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!