閉じる

C#の文字列補間($”…”)の使い方と基本文法をやさしく解説

C#の文字列補間は、文字列の中に変数や式を読みやすく埋め込める機能です。

$記号を付けた文字列の中で{…}を書くだけなので、初心者の方にもすぐに使いこなせます。

本記事では、基本の使い方から書式指定、エスケープ、つまずきやすいポイントまで、やさしく丁寧に解説します。

C#の文字列補間($”…”)の基本

{変数}を埋め込む書き方

いちばん基本の形

$"..."と書き、埋め込みたい場所に{変数名}を置きます

従来の+連結より読みやすく、タイプミスも減らせます。

C#
using System;

class Program
{
    static void Main()
    {
        // 変数を用意
        string name = "Taro";
        int age = 20;

        // 文字列補間:$ を先頭に付け、{変数}を埋め込む
        string message = $"こんにちは、{name}さん。あなたは{age}歳ですね。";

        Console.WriteLine(message);
    }
}
実行結果
こんにちは、Taroさん。あなたは20歳ですね。

どこにでも書ける

補間文字列は変数代入だけでなく、メソッド引数に直接書けます

C#
Console.WriteLine($"現在時刻: {DateTime.Now}");

Console.WriteLineで使う

複数の値をまとめて表示

複数の値を1行で分かりやすく表示できます。

C#
using System;

class Program
{
    static void Main()
    {
        string product = "Keyboard";
        int quantity = 3;
        double price = 2980.5;

        // 複数の変数を1つのメッセージに
        Console.WriteLine($"商品: {product}, 個数: {quantity}, 合計: {price * quantity}円");
    }
}
実行結果
商品: Keyboard, 個数: 3, 合計: 8941.5円

入力と組み合わせる

Console.ReadLineで受け取った入力も、そのまま補間できます

C#
using System;

class Program
{
    static void Main()
    {
        Console.Write("お名前を入力してください: ");
        string name = Console.ReadLine(); // キーボードから入力

        Console.WriteLine($"ようこそ、{name}さん!");
    }
}
実行結果
お名前を入力してください: Hanako
ようこそ、Hanakoさん!

文字列連結(+)との違い

読みやすさと保守性

補間は「テンプレートの穴埋め」なので、文章の形が崩れません

一方+連結は括弧や空白の位置ミスが起きやすく、式が長いほど可読性が落ちます。

C#
// 補間(読みやすい)
string s1 = $"合計は {a + b}、平均は {(a + b) / 2.0} です。";

// 連結(カッコや空白の管理が大変)
string s2 = "合計は " + (a + b) + "、平均は " + ((a + b) / 2.0) + " です。";

パフォーマンスの観点

補間は内部的に文字列連結や複合書式(string.Format)相当へ最適化されます

短い文章では差は感じにくいですが、繰り返し大量連結する場面はStringBuilderなどを検討します(本記事では詳細割愛)。

対応バージョン(C# 6以降)

使える環境

文字列補間はC# 6以降で利用可能です。

Visual Studio 2015以降、.NET Framework 4.6以降や .NET Core/.NET 5+ で一般的に利用できます。

プロジェクトの言語バージョンが古い場合は、.csprojでLangVersionを上げます。

XML
<!-- .csproj の例 -->
<PropertyGroup>
  <LangVersion>latest</LangVersion> <!-- もしくは 10 など -->
</PropertyGroup>

文字列補間の応用(式と書式指定)

{a + b}など式を埋め込む

計算や条件式もOK

{…}の中には式を書けます

ただし長くなりすぎると読みにくくなるため、適度に変数へ分けると良いです。

C#
using System;

class Program
{
    static void Main()
    {
        int a = 7, b = 3;
        bool isEven = ((a + b) % 2) == 0;

        Console.WriteLine($"a + b = {a + b}, 偶数ですか? {isEven}");
        Console.WriteLine($"大きい方は {(a > b ? a : b)} です。");
    }
}
実行結果
a + b = 10, 偶数ですか? True
大きい方は 7 です。

数値の書式 {n:0.00} {n:N0} {r:P}

代表的な数値フォーマット

コロン(:)の右側に書式指定子を置くと、整形された文字列に変換できます。

以下はよく使う例です。

指定例意味例(値: 12345.678)
{n:0.00}固定小数点(小数2桁)12345.68
{n:N0}桁区切り(小数0桁)12,346
{r:P}パーセント(×100, 小数2桁)12,345.68%
C#
using System;
using System.Globalization;

class Program
{
    static void Main()
    {
        double n = 12345.678;
        double r = 123.45678; // 比率として扱う例(1.0 = 100%)

        // CurrentCultureの影響を受ける点に注意(, や . の記号)
        Console.WriteLine($"固定小数点: {n:0.00}");
        Console.WriteLine($"桁区切り(小数なし): {n:N0}");
        Console.WriteLine($"パーセント: {r:P}");
    }
}
実行結果
固定小数点: 12345.68
桁区切り(小数なし): 12,346
パーセント: 12,345.68%

追加の小技

通貨(C)や16進(X)なども利用できます。

日本円表記などカルチャ指定が必要な場合はToString("C", culture)を使う方法もあります。

日付の書式 {d:yyyy/MM/dd}

DateTimeのフォーマット

DateTimeやDateOnlyも書式指定で整形できます。

C#
using System;

class Program
{
    static void Main()
    {
        DateTime d = new DateTime(2025, 1, 23, 14, 5, 6);

        Console.WriteLine($"日付(年月日): {d:yyyy/MM/dd}");
        Console.WriteLine($"時刻(時:分): {d:HH:mm}");
        Console.WriteLine($"カスタム: {d:yyyy年M月d日(ddd) HH:mm:ss}");
    }
}
実行結果
日付(年月日): 2025/01/23
時刻(時:分): 14:05
カスタム: 2025年1月23日(木) 14:05:06

整形と文字列の混在

文中に自然に溶け込ませる

通常の文字列と式・書式を自由に混在できます。

C#
using System;

class Program
{
    static void Main()
    {
        string user = "Mika";
        double score = 92.3;
        DateTime when = DateTime.Now;

        Console.WriteLine($"[{when:HH:mm}] {user} さんのスコアは {score:0.0} 点です。よくできました!");
    }
}
実行結果
[14:05] Mika さんのスコアは 92.3 点です。よくできました!

エスケープと特殊な書き方

中かっこを表示する {{ }} と }}

{ と } 自体を出したいとき

補間で使う波かっこは、そのままでは表示できません

表示したい場合は{{}}に二重化します。

C#
using System;

class Program
{
    static void Main()
    {
        Console.WriteLine($"波かっこを表示 {{ と }} の例");
        Console.WriteLine($"JSONっぽい出力: {{\"name\":\"Taro\"}}");
    }
}
実行結果
波かっこを表示 { と } の例
JSONっぽい出力: {"name":"Taro"}

ダブルクォートや改行の扱い

通常の文字列(エスケープ使用)

普通の文字列リテラルでは、引用符は"、改行は\nで表します。

C#
Console.WriteLine($"引用符は \" で表します。\n次の行です。");
実行結果
引用符は " で表します。
次の行です。

@逐語的文字列(エスケープ最小化)

@を付けるとバックスラッシュや改行をそのまま書けます(ただし"""と2連続で表現)。

C#
Console.WriteLine(@$"C:\Users\Taro\Docs\report.txt
ダブルクォートは "" で書きます。");
実行結果
C:\Users\Taro\Docs\report.txt
ダブルクォートは " で書きます。

$と@の組み合わせ $@”…” @$”…” の使いどころ

パスや複数行に最適

$と@は順序に関係なく同時に使えます($@"..."@$"..."は同じ意味)。

Windowsパスや複数行テンプレートに便利です。

C#
using System;

class Program
{
    static void Main()
    {
        string user = "Taro";
        string file = "report";

        // バックスラッシュや改行をそのまま書けて、{...}の補間も使える
        string path = $@"C:\Users\{user}\Docs\{file}.txt";
        Console.WriteLine(path);

        string multi = @$"
ユーザー: {user}
ファイル: {file}.txt
保存先 : C:\Users\{user}\Docs
";
        Console.WriteLine(multi);
    }
}
実行結果
C:\Users\Taro\Docs\report.txt

ユーザー: Taro
ファイル: report.txt
保存先 : C:\Users\Taro\Docs

初心者がつまずきやすいポイント

nullを補間したときの表示

nullは空文字として出力される

補間でnullを挿入すると、空文字として扱われます

ただしnullに対してメソッドやプロパティへアクセスすると例外です。

C#
using System;

class Program
{
    static void Main()
    {
        string s = null;
        int? n = null;

        // null は空文字として出力(間に何も表示されない)
        Console.WriteLine($"文字列:null→[{s}] 数値:null→[{n}]");

        object o = null;
        // Console.WriteLine($"これは例外: {o.ToString()}"); // NullReferenceException
        Console.WriteLine($"安全な書き方: {o?.ToString() ?? "(null)"}");
    }
}
実行結果
文字列:null→[] 数値:null→[]
安全な書き方: (null)

補間内のメソッド呼び出しは簡潔に

可読性を保つコツ

{…}の中に長い処理を書くと読みづらくなります

副作用のある呼び出しも避け、事前に変数へ格納しましょう。

C#
// 悪い例: 長いロジックを直書き
Console.WriteLine($"結果: {items.Where(x => x.IsActive).Select(x => x.Price).Average():0.00}円");

// 良い例: 先に計算してから補間
var avg = items.Where(x => x.IsActive).Select(x => x.Price).Average();
Console.WriteLine($"結果: {avg:0.00}円");

余計な空白や末尾スペースに注意

望まない空白の混入

リテラルに含めた空白はそのまま出力されます。

気づかない末尾スペースや改行が混入しないよう、行末や逐語的文字列の先頭・末尾に注意します。

C#
// 末尾にスペースが1つ含まれている → そのまま出力に出る
Console.WriteLine($"[{ "Hello" }] "); // ← ここにスペース

// Trimで不要な空白を除去する方法
string raw = $@"  { "Hello" }  
";
Console.WriteLine($"[{raw.Trim()}]");
実行結果
[Hello] 
[Hello]

まとめ

文字列補間は、可読性と保守性を大きく高めるC#の基本機能です。

{変数}の埋め込みから、{式}、{値:書式}の整形まで一貫して書け、Console.WriteLineなど日常的な出力コードをすっきりさせます。

C# 6以降で利用でき、$ と @ の組み合わせや中かっこのエスケープ、nullの扱いなどの注意点を押さえれば、実務でもすぐに役立ちます。

今日から$”…”を積極的に使い、読みやすく安全な文字列処理を書いていきましょう。

この記事を書いた人
エーテリア編集部
エーテリア編集部

C#の入門記事を中心に、開発環境の準備からオブジェクト指向の基本まで、順を追って解説しています。ゲーム開発や業務アプリを目指す人にも役立ちます。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!