※ この記事にはアフィリエイトリンクが含まれます
C#で文字列を連結する際に、うまく動作しなかったり、どの方法を選べばよいか悩んでいませんか?
- プログラムが遅くなる原因がわからない
- 簡単なコードで効率よく連結したい
- ループ内での文字列連結が遅くて困っている
結論から言うと、用途によって適切な連結方法が異なります。単純な連結は演算子や文字列補間、複数要素の結合はString.Join、ループ内や大量連結はStringBuilderが基本です。
+演算子:簡単で直感的、少量データ向け- 文字列補間(
$"..."):読みやすさ重視の推奨方法 String.Format:フォーマットが必要な場合に有用String.Join:配列やリストの結合に最適StringBuilder:多くの連結やループ内での高速化に必須
この記事では、初心者向けにそれぞれの方法の特徴と使い方、注意点をわかりやすく解説します。
この記事を読むことで、場面に応じた最適な連結方法を選べるようになります。
C#の文字列連結:基本はこれだけ押さえよう
まずは結論を簡潔に述べます。実務でよく使うのは以下の3つです。
+演算子(簡単な連結)- 文字列補間(
$"...", 可読性高い) StringBuilder(大量連結やループ)
これらを覚えれば、ほとんどのケースに対応できます。
+ 演算子での連結
ポイント:+ 演算子は短い文字列同士の連結に適しています。
理由はシンプルです。文字列同士を結合するだけなので、コードが読みやすくなります。
使い方と例
以下は基本的な使い方です。短い文や一度きりの結合に向いています。
string a = "Hello";
string b = "World";
string s = a + ", " + b + "!"; // Hello, World!ただし、複数回やループ内で+を使うとパフォーマンスが低下します。
補足と注意点
文字列は不変です。+演算子は内部で新しい文字列を生成します。
そのため大量の連結ではメモリと処理時間を多く消費します。
文字列補間($”…”)を使うメリット
ポイント:文字列補間は可読性が高く、式をそのまま埋め込めます。
理由はフォーマットが直感的なのでミスが減り、メンテナンスしやすいからです。
使い方と例
変数を文字列の中に直接埋め込めます。複数の値を読みやすく結合したい時に便利です。
int id = 10;
string name = "太郎";
string message = $"ID:{id} 名前:{name}"; // ID:10 名前:太郎内部的には+演算に近い処理になることがありますが、少量なら問題ありません。
注意点
複雑な式を多用すると読みづらくなる場合があります。適度に補助変数を使いましょう。
String.Formatの用途と使い分け
ポイント:Formatは複雑なフォーマットや文化依存の表現に有用です。
理由として、書式指定子を使って数値や日付の出力形式を統一できる点が挙げられます。
使い方と例
インデックスで位置を指定するため、テンプレート的に使えます。
string fmt = string.Format("{0}さんの合計は{1:N0}円です", "山田", 1234567);
// 山田さんの合計は1,234,567円ですただし、最近は文字列補間で同様のことができるため、用途に応じて使い分けます。
String.Join:配列やリストをつなげるときに最適
ポイント:配列やリストを区切り文字で結合するなら Join が最適です。
理由は内部で最適化されており、使い勝手も良いためです。
使い方と例
カンマ区切りや改行でつなぎたい場合に便利です。
string[] items = {"リンゴ", "バナナ", "みかん"};
string csv = string.Join(",", items); // リンゴ,バナナ,みかん
var lines = string.Join("\n", items);リストやIEnumerableを直接渡せるため、資料出力などでよく使われます。
StringBuilder:ループ内の大量連結で圧倒的に有利
ポイント:大量連結やループ内での連結は StringBuilder を使うべきです。
理由は StringBuilder が内部で可変バッファを持つため、再生成が少なく高速だからです。
使い方と例
ループで文字列をつなげる代表的なコード例です。特に回数が多い場合は効果が顕著です。
using System.Text;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 1000; i++)
{
sb.Append("No.");
sb.Append(i);
sb.AppendLine();
}
string result = sb.ToString();初期容量を設定しておくと、さらに効率が上がります。
いつStringBuilderを選ぶかの指標
- ループ内で100回以上連結するなら検討する
- 生成される合計文字長が大きい場合も有利
- 短い固定数の連結なら+や補間で十分
パフォーマンス比較と目安
ポイント:どの方法が速いかはケースによりますが、一般的な傾向があります。
少ない連結:+ 演算子や文字列補間が簡潔で問題なし。
大量連結:StringBuilderが最も効率的です。
配列結合:String.Joinが最適です。フォーマットが複雑ならString.Formatや補間を併用します。
よくある落とし穴と対処法
ポイント:初心者が陥りやすいミスを事前に知っておけば安心です。
null参照の連結や意図しない空白、パフォーマンスの低下が主な問題です。
nullの扱い
文字列がnullの場合、+演算子では”null”文字列にならず、例外にはなりませんが意図しない結果になります。
string a = null;
string b = "text";
string s = a + b; // "text" と同じ扱いになることもある
// 明示的に扱いたい場合は ?? を使う
string safe = (a ?? "") + b;不要なToString呼び出し
オブジェクトのToStringを多用すると可読性が落ちます。補間で済ませられる場合はそちらを使いましょう。
実践的な使い分けガイド(まとめ)
簡単に実務での選択基準を示します。状況に応じて適切な手段を選びましょう。
- 単発の結合やデバッグ出力:
+演算子、もしくは補間 - 可読性重視のテンプレート:文字列補間(
$"...") - 配列・リストの結合:
String.Join - ループ内や大量の連結:
StringBuilder - 複雑な書式:
String.Formatや補間の書式指定子
これらを覚えておけば、多くの場面で最適な実装ができます。
まとめと次のステップ
最後に要点を整理します。文字列連結は用途によって使い分けることが重要です。
短い結合や可読性重視なら+や補間、配列ならJoin、頻繁な連結やループではStringBuilderを使いましょう。
この記事の例を試して、自分のプロジェクトでどの方法が合うか検証してみてください。

#エンジニアとして、もっと自分の力を活かしたいあなたへ
「このまま今の職場にいて、成長できるんだろうか?」
C#を使っている方なら、一度はそう感じたことがあるかもしれません。
実は今、C#/.NETエンジニアの市場価値は高まっており、
年収アップ・フルリモート・自社開発企業など、選べる選択肢は確実に増えています。
もし今後、C#を活かして働きたい、あるいは開発現場で経験を積みたいとお考えなら…
自分に合った転職サービスを早めに知っておくことが大きな武器になります。
現役エンジニアからのサポート付き・無料で学べるスクール・社内SE特化の求人など、
転職支援サービスを厳選したまとめ記事をこちらで紹介しています。

ここまで読んでいただきありがとうございました。
コメント