C#における文字列操作は非常に多様ですが、可読性と保守性を両立する手法として文字列補間がおすすめです。従来の文字列結合やstring.Format
と比べて、コードが直感的になりエラーも減少します。
本記事では基礎から応用まで、実践的なサンプルを交えて解説します。
従来の文字列結合とその課題
C# 5以前では主に次の手法が利用されていました。
- 「
+
」演算子による連結 string.Format
メソッドStringBuilder
を用いた高速処理
これらには以下のような問題があります。
- 連結箇所が増えると読みづらい
- フォーマットの順序を間違えやすい
- プレースホルダーと引数がズレるとランタイムエラー
文字列補間の基本構文
C# 6.0で導入された文字列補間は、ドル記号 $
と大括弧 {}
を組み合わせて使います。
変数や式をそのまま埋め込むことができ、可読性が劇的に向上します。
string name = "太郎";
int age = 28;
string message = $"こんにちは、{name}さん。年齢は{age}歳ですね。";
Console.WriteLine(message);
// こんにちは、太郎さん。年齢は28歳ですね。
上記のように、文字列内で直接変数を参照できます。
フォーマット指定子の活用
数字や日付などのフォーマットを指定するには、大括弧内にコロン :
を追加します。
フォーマット指定子 | 説明 | 例 |
---|---|---|
D | 10進数 | {count:D4} |
X | 16進数 | {count:X} |
P | パーセント | {ratio:P2} |
yyyy-MM-dd | 日付 | {today:yyyy-MM-dd} |
int num = 12345;
DateTime today = DateTime.Today;
Console.WriteLine($"ID: {price:C}, 日付: {today:yyyy-MM-dd}");
// ID: 12345, 日付: 2025-07-14
このようにフォーマットを文字列内で指定できます。
複雑な式や条件式の埋め込み
文字列補間内には関数呼び出しや三項演算子も利用可能です。
短いロジックを直接埋め込めるため、コードの行数を削減できます。
int score = 85;
string result = $"結果: {(score >= 60 ? "合格" : "不合格")}, スコア: {score}";
Console.WriteLine(result);
// 結果: 合格, スコア: 85
さらにメソッド呼び出しも動作します。
string FormatName(string first, string last) => $"{last} {first}";
Console.WriteLine($"氏名: {FormatName("太郎", "山田")}");
// 氏名: 山田 太郎
複数行文字列との組み合わせ
C# 11で導入された生文字列リテラルを使うと、複数行にわたる文字列補間がシンプルになります。
3つのダブルクォート """
で囲み、途中で改行してもそのまま埋め込めます。
string title = "報告書";
string content = "本日の進捗をまとめました。";
string report = """
タイトル: {title}
内容 : {content}
作成日: {DateTime.Now:yyyy/MM/dd}
""";
Console.WriteLine(report);
/*
タイトル: 報告書
内容 : 本日の進捗をまとめました。
作成日: 2025/07/14
*/
インデントも自動調整され、可読性が高いです。
パフォーマンスの視点
文字列補間は内部的に FormattableString
を使い、実行時にフォーマット処理が行われます。
短い文字列ならパフォーマンスへの影響はほとんどありませんが、大量処理時には注意が必要です。
- 頻繁に補間を行う場合は
StringBuilder
併用を検討する - ループ内で同じフォーマットを使い回すときはキャッシュ化する
実際のアプリケーションではベンチマークを取り、必要に応じた最適化を行いましょう。
注意点と落とし穴
文字列補間を使う際の落とし穴をいくつか紹介します。
- 補間内で例外が発生すると文字列生成自体が失敗する
- カルチャ依存のフォーマットに注意(日本語環境と英語環境で結果が異なる)
- 長い式を直接埋め込むと可読性が低下
上記を回避するには、事前に変数に格納するなどシンプルな文字列補間になるように心がけましょう。
まとめ
文字列補間はC#での文字列操作をより直感的にし、バグの少ないコードを実現します。
基本的な使い方から高度なフォーマット、パフォーマンス最適化までを理解し、適切に使い分けましょう。
今回の記事を参考に、あなたのC#コードをより読みやすく、メンテナンスしやすいものへと進化させてください!