C# では、string は テキストを表す不変の参照型です。文字列は補間、豊富なメソッドライブラリ、そしてパフォーマンスのために重要な StringBuilder による効率的な繰り返し変更をサポートしています。
文字列補間と作成
name = ;
age = ;
msg = ;
formatted = ;
path = ;
multi = ;
文字列補間 ($"...")は、埋め込まれた値とフォーマット指定子を使って文字列を構築する現代的で読みやすい方法です。逐語的 (@) 文字列はエスケープを無効にし(パスや正規表現に最適)、生文字列リテラル (""") は複数行のテキストを処理します。
string s = "Hello";
s.ToUpper(); // returns a NEW string "HELLO"; s is unchanged
s = s + " World"; // creates a NEW string; the old "Hello" is discarded
文字列を "変更" するすべての操作は、実際には 新しい 文字列を作成します(不変性)。これは安全ですが、繰り返し変更の場合はパフォーマンスコストがあります。
// ❌ string concatenation in a loop — creates a new string each iteration (slow, O(n²))
string result = "";
for (int i = 0; i < 10000; i++) result += i;
// ✅ StringBuilder mutates a buffer — efficient (O(n))
var sb = new StringBuilder();
for (int i = 0; i < 10000; i++) sb.Append(i);
string final = sb.ToString();
ループ内で文字列を構築する場合、StringBuilder を使用すると多くの中間文字列の作成を避けられます — これは重要なパフォーマンス実践です。
s.Length; s.ToUpper(); s.Trim(); s.Substring(0, 5);
s.Contains("x"); s.IndexOf("x"); s.Replace("a", "b");
s.Split(','); string.Join(",", items);
string.IsNullOrEmpty(s); string.IsNullOrWhiteSpace(s);
文字列操作はプログラミングに遍在しており(出力の構築、入力処理、データフォーマット)、C# 文字列を理解することは本質的な日常知識です。
現代的な機能はプロダクティビティに関わります。文字列補間 ($"...") は埋め込み値とフォーマットを使用して文字列を構築するクリーンで読みやすい方法であり、逐語的/生文字列リテラルはパスと複数行テキストを優雅に処理します。
重要なのは、文字列は不変 であることを理解することです(すべての "変更" は新しい文字列を作成)。これはパフォーマンスに関わる重要な考慮事項を説明します。単純な ループでの文字列連結 は無駄です(O(n²) で多くの中間文字列を作成)。そして繰り返し変更に対して StringBuilder を使用する(内部バッファを効率的に変更する)ことを知ることは、不変性から直接得られる重要な実践的な最適化です。
豊富な文字列メソッドライブラリ(検索、置換、分割/結合、フォーマット)、現代的な補間構文、不変性駆動の StringBuilder 実践を知ることは、プログラミングが含む定常的な文字列操作の中核知識です — ここでの流暢性、特に補間の利便性と StringBuilder のパフォーマンス修正は、クリーンで効率的な C# を書くための基本です。