C# の StringBuilder とは何ですか

WBOY
リリース: 2024-09-03 15:22:23
オリジナル
1090 人が閲覧しました

次の記事「C# の StringBuilder とは」では、C# の StringBuilder の概要を説明します。 StringBuilder について話す前に、まず不変性の概念を見てみましょう。文字列に精通している場合は、おそらく文字列には不変の性質があることをご存知でしょう。つまり、新しいオブジェクトが作成され、新しいメモリの場所がそれに提供されるたびに、したがって常にデータ変更が発生した場合、変更されたデータは新しいメモリの場所に配置され、元の文字列は安全に保たれます。さて、少し考えてみましょう。このアプローチのユースケースは何ですか?データベースの詳細や、一時的に変更されないその他の資格情報などの資格情報を設定している場合は、文字列を使用して安全に保つことができます。ここで、StringBuilder と呼ばれる別の種類のオブジェクトが登場しました。つまり、本質的に変更可能であり、現在のメモリ位置にあるデータのみを変更できるようにすることでメモリを節約します。このような機能は、複数の追加操作を実行したい場合に便利です。

C# での StringBuilder の定義

StringBuilder は、変更可能な文字セットを表すクラスであり、System のオブジェクトです。テキスト名前空間。 StringBuilder は本質的に動的オブジェクトであるため、StringBuilder はメモリ内に新しいオブジェクトを作成せず、変更された文字列または新しい文字列を組み込むために必要なメモリを動的に拡張します。文字列ビルダーは、マルチスレッド環境では説得力がありません。マルチスレッドの概念が適切に使用されていない場合、複数のスレッドによって上書きされるとデータの不整合が生じる可能性があるからです。

StringBuilder を理解する

1.ここで、可変性がもたらす結果を理解する必要があります。同じデータ セットが動的に拡張される場合にのみ、可変性の使用を選択する必要があります。このシナリオを理解するために例を見てみましょう。

2. HTML フォームからデータを取得し、そのデータをビジネス ロジックに基づいてテーブルに保存する場合 (最初にデータを検証する)、その場合は StringBuilder オブジェクトを作成し、それに関連付けてすべてのデータ フィールドを追加できます。データベースの列を取得し、最後に挿入クエリを実行してそのすべてをデータベースに配置できます。このようなアプローチの利点は、常に新しいメモリ位置が割り当てられる必要がないことです。そして、C# は動的拡張を使用してその 1 つのメモリの場所を管理します。

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 プロパティの値が 2 倍になり、新しい文字が StringBuilder オブジェクトに追加され、その Length プロパティが調整しました。
  • 最大容量に達すると、StringBuilder オブジェクトに対してそれ以上のメモリ割り当てはできなくなり、いずれにしても最大容量を超える拡張が行われると、前述の 2 つのエラーのいずれかがスローされる可能性があります。

ArgumentOutOfRangeException.
OutOfMemoryException.

メリット

  • C# で複数のメモリ位置を管理する必要はありません。
  • 容量に達するまでオブジェクトを動的に拡張します。
  • 文字列に変換したり、その逆に変換したりできます。

C# で StringBuilder を使用する必要があるのはなぜですか?

  • string が concat 操作に続き、StringBuilder が append 操作と追加に続くことがわかります
  • concat は StringBuilder で行う必要のない新しいメモリ位置を割り当てる必要があるため、concat よりも高速であるように見えます。
  • データが一時的、つまり非永続的であり、呼び出しごとに異なる場合は、マルチスレッドを使用せずに作業している限り StringBuilder を使用できます。そうでない場合は、スレッドセーフが問題になります。

C# で StringBuilder が必要なのはなぜですか?

これについては上記のポイントのみで説明しましたが、これが役立つユースケースをここで推測できます。

結論

ここでは、string と StringBuilder の違い、いつ何を使用するか、また StringBuilder の操作中に発生する可能性のある課題や例外は何なのかを確認しました。

以上がC# の StringBuilder とは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート