文字列整形における課題
C#でプログラムを記述する際、変数や式の値を組み合わせて一つの文字列を生成する場面は非常に多くあります。
従来は、+演算子による文字列連結や、string.Formatメソッドが用いられてきました。
// 従来の方法 1: + 演算子
string userName = "ID-001";
int score = 1500;
string message1 = "ユーザー " + userName + " のスコアは " + score + " です。";
// 従来の方法 2: string.Format
string message2 = string.Format("ユーザー {0} のスコアは {1} です。", userName, score);
これらの方法は機能しますが、+演算子は変数が多くなるとコードが読みにくくなり、string.Formatはプレースホルダー({0}, {1})と引数の対応関係を管理するのが煩雑で、順序を間違えるといったミスも起こり得ます。
こうした課題を解決し、より直感的かつ安全に文字列を整形する機能が「文字列補間(String Interpolation)」です。
文字列補間($)の基本
文字列補間は、C# 6.0から導入された機能で、文字列リテラルの先頭に$記号を付けることで有効になります。
$を付けた文字列(「補間文字列」と呼ばれます)の内部では、波括弧{}を使用して、その場に変数や式の結果を直接埋め込むことができます。
基本的な使用例
先ほどの例を文字列補間で書き換えると、以下のようになります。
using System;
public class InterpolationBasic
{
public static void Main()
{
string userName = "ID-001";
int score = 1500;
// 文字列補間 ($) を使用
string message = $"ユーザー {userName} のスコアは {score} です。";
Console.WriteLine(message);
}
}
出力結果:
ユーザー ID-001 のスコアは 1500 です。
{userName}や{score}のように記述するだけで、string.Formatよりもはるかに直感的に、どの場所にどの値が入るかが明確になります。
文字列補間の応用
文字列補間の機能は、単純に変数を埋め込むだけではありません。書式設定や、より複雑なロジックを波括弧内に含めることができます。
1. 書式設定の適用
string.Formatと同様に、コロン(:)に続けて書式指定子を記述することで、数値や日付の表示形式を整えることができます。
using System;
using System.Globalization;
public class FormattingExample
{
public static void Main()
{
// カルチャを日本に設定(通貨記号などのため)
CultureInfo.CurrentCulture = new CultureInfo("ja-JP");
decimal unitPrice = 1980m;
double discountRate = 0.05;
DateTime orderDate = new DateTime(2025, 11, 20);
// N0: 3桁区切り
// C: 通貨形式
Console.WriteLine($"単価: {unitPrice:N0} (税込 {unitPrice * 1.1m:C})");
// P1: パーセンテージ(小数点以下1桁)
Console.WriteLine($"割引率: {discountRate:P1}");
// yyyy/MM/dd: 日付フォーマット
Console.WriteLine($"注文日: {orderDate:yyyy/MM/dd}");
}
}
出力結果:
単価: 1,980 (税込 ¥2,178)
割引率: 5.0%
注文日: 2025/11/20
2. 式とメソッド呼び出し
波括弧内には、変数だけでなく、計算式やメソッドの呼び出し結果も直接記述できます。
using System;
using System.Collections.Generic;
public class ExpressionExample
{
public static void Main()
{
var items = new List<string> { "Apple", "Banana", "Cherry" };
int price = 150;
int quantity = 3;
// メソッド呼び出し (items.Count)
Console.WriteLine($"カート内の商品数: {items.Count} 点");
// 算術式 (price * quantity)
Console.WriteLine($"合計金額: {price * quantity:C}");
}
}
出力結果:
カート内の商品数: 3 点
合計金額: ¥450
3. 条件演算子(三項演算子)
波括弧内で条件演算子(?:)を使い、条件によって表示する内容を切り替えることも可能です。
using System;
public class ConditionalExample
{
public static void Main()
{
int stockLevel = 5;
bool isActive = false;
// 在庫レベルに応じてメッセージを分岐
string stockMessage = $"在庫状況: {(stockLevel > 0 ? "在庫あり" : "在庫切れ")}";
// bool値に応じて表示を分岐
string statusMessage = $"ステータス: {(isActive ? "有効" : "無効")}";
Console.WriteLine(stockMessage);
Console.WriteLine(statusMessage);
}
}
出力結果:
在庫状況: 在庫あり
ステータス: 無効
注意点: 波括弧({})自体の表示
文字列補間を使用している際に、波括弧{または}の文字自体を文字列に含めたい場合は、それらを2回連続で記述(エスケープ)します。
using System;
public class BraceExample
{
public static void Main()
{
int value = 100;
// {value} という文字列そのものを表示したい
// { を {{ 、 } を }} と記述する
string message = $"JSON形式: {{ \"data\": {value} }}";
Console.WriteLine(message);
}
}
出力結果:
JSON形式: { "data": 100 }
まとめ
文字列補間($)は、C#における文字列整形を劇的に簡潔かつ可読性の高いものにします。+演算子やstring.Formatに代わる強力な手段であり、書式設定や式と組み合わせることで、柔軟な文字列生成を効率的に行うことができます。
