チュートリアル: 文字列補間を使用して C でレポートを作成する#

このチュートリアルでは、書式設定された注文の概要を出力する小さな ファイル ベースのアプリ を作成します。 その過程で、 文字列補間 を適用して、テキストに値を挿入し、数値と通貨を書式設定し、列を並び、カルチャ固有の出力を生成します。

このチュートリアルでは、C# の基本的な概念を理解していることを前提としています。 補間構文の特徴ごとのリファレンスについては、「 文字列補間」を参照してください。

前提条件

  • .NET 10 SDK 以降のバージョン。 ファイル ベースのアプリには、.NET 10 以降が必要です。
  • コード エディター (Visual Studio Code など)。

アプリを作成する

ファイル ベースのアプリは、プロジェクト ファイルなしで実行する 1 つの .cs ファイルです。 アプリのフォルダーを作成し、そのフォルダーに移動します。

mkdir StringInterpolation
cd StringInterpolation

そのフォルダーに report.cs という名前の空のファイルを作成し、エディターで開きます。 次のセクションでコードを追加し、 dotnet run report.csを使用してアプリを実行します。

テキストに値を挿入する

文字列リテラルの前に $ を付けると、補間文字列になります。 文字列内に、C# 式を中かっこ ({}) に入れます。C# は式を評価し、結果を文字列に変換して挿入します。

次のコードを report.csに追加し、 dotnet run report.csを使用してアプリを実行します。

string name = "Maria";
int itemCount = 3;

// Prefix a string literal with $ to interpolate expressions inside braces.
Console.WriteLine($"Hello, {name}! You have {itemCount} items in your cart.");
// => Hello, Maria! You have 3 items in your cart.

結果は、リテラル テキストと nameitemCountの値を組み合わせたものになります。

数値と通貨の書式設定

注文の概要には金額とレートが表示されるため、 23.50.08 などの生の数値は未完成で読みにくいように見えます。 顧客が期待する方法で各値を提示します。通貨記号と税率をパーセンテージとして持つ価格です。 補間式の一部として扱います。

値を書式設定するには、式の後にコロン (:) と 書式指定文字列を指定します。 標準書式指定文字列 C および P0 は、通貨と整数のパーセンテージを表します。 次のコードをファイルの最後に追加します。

decimal subtotal = 23.5m;
decimal taxRate = 0.08m;

// Follow an expression with :format to apply a standard or custom format string.
Console.WriteLine($"Subtotal: {subtotal:C}");
Console.WriteLine($"Tax rate: {taxRate:P0}");
Console.WriteLine($"Total:    {subtotal * (1 + taxRate):C}");
// => Subtotal: $23.50
// => Tax rate: 8%
// => Total:    $25.38

書式指定文字列は現在のカルチャの規則を適用するため、通貨記号と区切り記号はコンピューターの設定と一致します。

値を列に配置する

複数行のデータを印刷すると、長さが異なる値を指定すると、列が不規則になり、スキャンが困難になります。 一貫性のある見出しの下に各名前と番号を並ぶには、各フィールドに固定幅を付けて、各値の長さに関係なく列がまっすぐになるようにします。

フィールドの最小幅を設定するには、式の後にコンマ (,) と幅を指定します。 正の幅は値を右揃えにします。負の幅を左揃えにします。 幅と書式指定文字列を {expression,width:format}として結合します。 表形式の概要を出力する次のコードを追加します。

(string Name, int Quantity, decimal Price)[] orders =
[
    ("Espresso", 2, 3.50m),
    ("Cappuccino", 1, 4.25m),
    ("Tea", 4, 2.00m),
];

// Follow an expression with ,width to set a minimum field width.
// A positive width right-aligns; a negative width left-aligns.
foreach (var order in orders)
{
    Console.WriteLine($"{order.Name,-12}{order.Quantity,3}{order.Price * order.Quantity,10:C}");
}
// => Espresso      2     $7.00
// => Cappuccino    1     $4.25
// => Tea           4     $8.00

左揃えの名前列と右揃えの数値列は、読み取り可能なテーブルに並びます。

文化固有の出力を生成する

挿入文字列では、既定で 現在のカルチャ が使用されます。 ログの固定形式やレシートのロケールなど、特定のカルチャが必要な場合は、カルチャを String.Create(IFormatProvider, DefaultInterpolatedStringHandler)に渡します。 次のコードを追加します。

decimal total = 1234.56m;

// An interpolated string uses the current culture by default.
// Use string.Create with a culture to control the formatting explicitly.
string germanReceipt = string.Create(
    new CultureInfo("de-DE"), $"Gesamt: {total:C}");
string invariantLog = string.Create(
    CultureInfo.InvariantCulture, $"total={total:F2}");

Console.WriteLine(germanReceipt);
Console.WriteLine(invariantLog);
// => Gesamt: 1.234,56 €
// => total=1234.56

ドイツ語のレシートでは、小数点記号とユーロ記号としてコンマが使用されます。 インバリアント ログは、マシンのカルチャに関係なく、ピリオドを使用し、シンボルを使用しません。

次のステップ

文字列補間を使用して、値の挿入、書式設定、配置、ローカライズを行いました。 生の文字列リテラル、エスケープされた中かっこ、定数補間文字列などを含む補間の全機能については、次の概念記事を参照してください:

こちらも参照ください