C#のコードで文字列を組み立てる時に、変数の値をそのまま文字列の中に書けたら便利だと思ったことはありませんか。
C#には文字列補間という機能があり、$"を使うことで可読性の高いコードを書けます。
本記事では、変数を埋め込む基本的な書き方から、式やフォーマット指定、よくあるエラー回避までをコンパクトに解説します。
【C#】文字列補間($”…”)とは
文字列補間の概要
文字列補間(interpolated string)とは、C#で$"..."という書き方を使い、文字列の中に変数や式の結果を直接埋め込む仕組みのことです。
従来はstring.Formatや+演算子で文字列をつないでいましたが、文字列補間を使うと、テンプレート文字列のように直感的に書けます。

文字列補間の基本的な文法は次のようになります。
$"文字列の中に {変数や式} をそのまま書く"
この{}の中に、変数名や簡単な式を書くことで、その評価結果が文字列に埋め込まれます。
文字列補間の基本的な書き方
変数を埋め込む一番シンプルな例
using System;
class Program
{
static void Main()
{
// 文字列の変数
string name = "Taro";
// 整数の変数
int age = 20;
// $"...{変数}..." で文字列の中に変数を埋め込みます
string message = $"私の名前は{name}で、年齢は{age}歳です。";
Console.WriteLine(message);
}
}
私の名前はTaroで、年齢は20歳です。
ポイントは、文字列リテラルの先頭に$を付けることと、{name}や{age}のように{}で囲んで変数を書くだけ、というシンプルさです。
複数の変数を組み合わせる
1つの文字列の中に、いくつでも変数を埋め込めます。
using System;
class Program
{
static void Main()
{
string firstName = "Taro";
string lastName = "Yamada";
int year = 2025;
// 複数の変数をまとめて埋め込む例
string info = $"氏名:{lastName} {firstName}, 西暦:{year}年";
Console.WriteLine(info);
}
}
氏名:Yamada Taro, 西暦:2025年
文字列と変数が交互に並ぶようなケースで、読みやすさの違いが特に大きくなります。
式(計算・メソッド呼び出し)の埋め込み
四則演算などの式を入れる
文字列補間の{}の中には、単なる変数だけでなく式も書けます。
using System;
class Program
{
static void Main()
{
int price = 1200;
double taxRate = 0.1;
// {} の中に計算式を直接書いています
string result = $"税込価格は {price * (1 + taxRate)} 円です。";
Console.WriteLine(result);
}
}
税込価格は 1320 円です。
一時変数を作らなくても、その場で計算結果を埋め込めるため、簡単な計算なら非常にコンパクトに書けます。
メソッドの結果を埋め込む
メソッド呼び出しも同様に{}の中に書けます。
using System;
class Program
{
static void Main()
{
string name = "taro yamada";
// ToUpper メソッドの戻り値を埋め込む例
string msg = $"ユーザー:{name.ToUpper()} さんがログインしました。";
Console.WriteLine(msg);
}
}
ユーザー:TARO YAMADA さんがログインしました。
「その場で加工して、その結果を埋め込む」という使い方がしやすく、補間文字列が簡単なビューのような役割を果たします。
数値・日付のフォーマット指定
書式指定文字列の基本
数値や日付にはフォーマット(表示形式)を指定できます。
書式指定は、{値:書式}のようにコロン:を使って指定します。

数値のフォーマット例
using System;
class Program
{
static void Main()
{
int price = 1234567;
// 3桁区切りのカンマを付ける例
string withComma = $"価格は {price:#,0} 円です。";
// 小数点以下2桁まで表示する例
double rate = 0.12345;
string rateText = $"金利は {rate:P2} です。"; // P2 はパーセンテージ(小数2桁)
Console.WriteLine(withComma);
Console.WriteLine(rateText);
}
}
価格は 1,234,567 円です。
金利は 12.35 % です。
フォーマットを付けることで、見た目を整えた文字列を簡単に作成できます。
日付のフォーマット例
using System;
class Program
{
static void Main()
{
DateTime now = new DateTime(2025, 1, 15, 14, 30, 0);
// 日付のみ
string d1 = $"今日は {now:yyyy/MM/dd} です。";
// 日付と時刻
string d2 = $"現在時刻は {now:yyyy年MM月dd日 HH:mm} です。";
Console.WriteLine(d1);
Console.WriteLine(d2);
}
}
今日は 2025/01/15 です。
現在時刻は 2025年01月15日 14:30 です。
旧来の書き方との比較(可読性の違い)
文字列結合(+)との比較
文字列補間を使わない場合、よく次のように書きます。
using System;
class Program
{
static void Main()
{
string name = "Taro";
int age = 20;
// 従来の "+" を使った結合
string message1 = "私の名前は" + name + "で、年齢は" + age + "歳です。";
// 文字列補間を使った書き方
string message2 = $"私の名前は{name}で、年齢は{age}歳です。";
Console.WriteLine(message1);
Console.WriteLine(message2);
}
}
私の名前はTaroで、年齢は20歳です。
私の名前はTaroで、年齢は20歳です。
出力結果は同じですが、コードの読みやすさは文字列補間の方が大きく勝ります。
日本語テキストの流れをそのまま保ちつつ、変数の位置だけ{}で示せるのが利点です。
string.Formatとの比較
string.Formatを使う書き方は次のようになります。
using System;
class Program
{
static void Main()
{
string name = "Taro";
int age = 20;
// string.Format 版
string message1 = string.Format("私の名前は{0}で、年齢は{1}歳です。", name, age);
// 文字列補間版
string message2 = $"私の名前は{name}で、年齢は{age}歳です。";
Console.WriteLine(message1);
Console.WriteLine(message2);
}
}
私の名前はTaroで、年齢は20歳です。
私の名前はTaroで、年齢は20歳です。
string.Formatはインデックス番号を数える必要がありますが、文字列補間は「名前そのもの」を書けるため、修正が容易でミスも減ります。
エスケープと注意点
波かっこ{}を文字として表示したい場合
文字列補間では{}が特別な意味を持つため、単なる文字として波かっこを出したい場合は二重にします。
using System;
class Program
{
static void Main()
{
int value = 10;
// {{ と }} で { と } を出力します
string text = $"値は {value} で、式は {{value}} のように書きます。";
Console.WriteLine(text);
}
}
値は 10 で、式は {value} のように書きます。
{ と } を1つだけ書くと、コンパイルエラーになるので注意してください。
ダブルクォート”を含めたい場合
$"も普通の文字列リテラルなので、"を含める場合はバックスラッシュでエスケープします。
using System;
class Program
{
static void Main()
{
string name = "Taro";
// \" でダブルクォートを表現します
string msg = $"ユーザー \"{name}\" がログインしました。";
Console.WriteLine(msg);
}
}
ユーザー "Taro" がログインしました。
よくある間違いとエラー例
$の付け忘れ
最もよくあるミスは$の付け忘れです。
using System;
class Program
{
static void Main()
{
string name = "Taro";
// 誤り: $ を付け忘れている
// string text = "こんにちは、{name}さん"; // そのまま {name} と出力される
// 正しい書き方
string text = $"こんにちは、{name}さん";
Console.WriteLine(text);
}
}
$ を付け忘れると補間が行われず、「{name}」という文字がそのまま出力されます。
波かっこの対応不備
{ の後ろに対応する } がないとコンパイルエラーになります。
using System;
class Program
{
static void Main()
{
int value = 10;
// 誤りの例 (コメントアウト)
// string text = $"値は {value です"; // } が足りないためエラー
// 正しい例
string text = $"値は {value} です";
Console.WriteLine(text);
}
}
また、式の途中で"を誤って閉じてしまうと、やはりコンパイルエラーになるので、エディタの色付けやインデントをよく確認すると安心です。
verbatim文字列(@)との組み合わせ
改行を含むテンプレートでの利用
複数行のテンプレート文字列に変数を埋め込みたい場合、$と@を組み合わせられます。
using System;
class Program
{
static void Main()
{
string name = "Taro";
int age = 20;
// $@"...": 複数行の文字列補間
string profile = $@"ユーザープロフィール
名前: {name}
年齢: {age}歳";
Console.WriteLine(profile);
}
}
ユーザープロフィール
名前: Taro
年齢: 20歳
$@または@$のどちらでも構いませんが、$@"..."の形がよく使われます。
まとめ
文字列補間$"..."を使うと、文字列の中に変数や式を自然な形で埋め込めるため、コードの可読性と保守性が大きく向上します。
変数をそのまま{}に書けることに加えて、計算結果やメソッドの戻り値、数値や日付のフォーマット指定まで柔軟に扱えるのが特徴です。
従来の+による結合やstring.Formatから置き換えるだけでもメリットが大きいため、C#で文字列を扱う際は、基本形として文字列補間を使う習慣を付けることをおすすめします。
