C#の{0}とは?String.Formatの意味・使い方・0埋めまで初心者向けに解説
はじめに
C#で文字列を扱っていると、次のようなコードを見かけることがあります。
C#string message = string.Format("こんにちは、{0}さん", name);
この {0} を初めて見ると、「C#の0とは何?」「なぜ波かっこの中に0を書くの?」「0埋めと関係あるの?」と疑問に思うかもしれません。
結論からいうと、C#の {0} は String.Format などで使うプレースホルダーです。プレースホルダーとは、あとから値を差し込むための目印のことです。
また、C#では {0:D5} や {0:00000} のように書くことで、数値を 00123 のように0埋めして表示することもできます。
この記事では、C#の {0} の意味、String.Format の基本的な使い方、複数の値を埋め込む方法、0埋めの書き方、文字列補間との違いまで、初心者向けに順番に解説します。
1. C#の{0}とは?結論:String.Formatで値を差し込むためのプレースホルダー
C#の {0} は、主に string.Format で使われる書き方です。
たとえば、次のコードを見てください。
C#string name = "田中";
string result = string.Format("こんにちは、{0}さん", name);
Console.WriteLine(result);
出力結果は次のようになります。
こんにちは、田中さん
{0} の部分に、後ろで指定した name の値が差し込まれています。
つまり {0} は、「ここに値を入れてください」という目印です。
1-1. {0}は「1つ目の引数」を表示する場所を表す
string.Format では、1つ目の引数に文字列のテンプレートを書き、その後ろに差し込みたい値を書きます。
C#string.Format("こんにちは、{0}さん", "佐藤");
この場合、{0} は後ろに渡した "佐藤" を表します。
こんにちは、佐藤さん
ポイントは、{0} が「最初に渡した値」を指していることです。
C#string result = string.Format("名前:{0}", "山田");
この場合、{0} には "山田" が入ります。
名前:山田
1-2. {0}の0は数値のゼロではなく「引数の順番」を表す
{0} の中にある 0 は、単なる数字のゼロとして表示されるわけではありません。
これは、何番目の引数を表示するかを表す番号です。
C#では多くの場合、番号は0から始まります。これをゼロベースといいます。
C#string result = string.Format("{0}は{1}歳です", "田中", 25);
Console.WriteLine(result);
出力結果は次のとおりです。
田中は25歳です
この例では、対応関係は次のようになります。
| プレースホルダー | 対応する値 |
|---|---|
{0} | "田中" |
{1} | 25 |
つまり、{0} の 0 は「1番目の値」を表しています。
1-3. {0}はどんな場面で使う?文字列に変数を埋め込む基本用途
{0} は、文字列の中に変数や値を埋め込みたいときに使います。
たとえば、次のような場面です。
| 用途 | 例 |
|---|---|
| 名前をメッセージに入れる | こんにちは、田中さん |
| 数値を文章に入れる | 合計金額は1200円です |
| 日付を表示する | 今日は2026/06/07です |
| IDを0埋めする | 会員番号:00042 |
| ログメッセージを作る | ユーザーID: 123 がログインしました |
固定の文章だけであれば通常の文字列で十分ですが、名前・金額・日付・番号など、実行時に変わる値を入れたい場合に {0} が役立ちます。
1-4. まず覚えるべき基本形:string.Format("{0}", 値)
初心者が最初に覚えるべき形は、次の書き方です。
C#string.Format("{0}", 値)
たとえば、文字列を入れる場合は次のようになります。
C#string result = string.Format("{0}", "Hello");
Console.WriteLine(result);
出力結果です。
Hello
数値でも同じです。
C#string result = string.Format("{0}", 123);
Console.WriteLine(result);
出力結果です。
123
{0} は、後ろに渡した1つ目の値を文字列として表示する場所です。
2. String.Formatの基本構文と{0}の使い方
ここからは、String.Format の基本構文をもう少し詳しく見ていきます。
2-1. String.Formatとは?文字列を指定した形式に整えるメソッド
String.Format は、文字列の中に値を埋め込んだり、数値や日付を指定した形式で表示したりするためのメソッドです。
C#では通常、小文字で始まる string.Format と書くことが多いですが、これは String.Format と同じ意味です。
C#string result = string.Format("名前:{0}", "田中");
string は System.String の別名です。そのため、次の2つはほぼ同じ意味です。
C#string.Format("名前:{0}", "田中");
String.Format("名前:{0}", "田中");
一般的には、C#のコードでは string.Format と書かれることが多いです。
2-2. 基本構文:string.Format("文字列{0}", 引数)
string.Format の基本構文は次のとおりです。
C#string.Format("文字列{0}", 引数)
実際の例です。
C#string name = "鈴木";
string message = string.Format("こんにちは、{0}さん", name);
Console.WriteLine(message);
出力結果です。
こんにちは、鈴木さん
"こんにちは、{0}さん" がテンプレート文字列です。
その後ろの name が、{0} に入る値です。
2-3. {0}に文字列を入れる例
{0} には文字列を入れることができます。
C#string fruit = "りんご";
string result = string.Format("好きな果物は{0}です", fruit);
Console.WriteLine(result);
出力結果です。
好きな果物はりんごです
直接文字列を指定することもできます。
C#string result = string.Format("商品名:{0}", "ノートパソコン");
Console.WriteLine(result);
出力結果です。
商品名:ノートパソコン
2-4. {0}に数値を入れる例
{0} には数値も入れられます。
C#int price = 1200;
string result = string.Format("価格は{0}円です", price);
Console.WriteLine(result);
出力結果です。
価格は1200円です
数値をそのまま表示するだけでなく、後ほど解説する書式指定を使うことで、桁区切りや小数点の桁数も指定できます。
C#int price = 1200;
string result = string.Format("価格は{0:N0}円です", price);
Console.WriteLine(result);
出力結果です。
価格は1,200円です
2-5. {0}に日付を入れる例
{0} には日付も入れられます。
C#DateTime today = new DateTime(2026, 6, 7);
string result = string.Format("今日は{0}です", today);
Console.WriteLine(result);
出力は実行環境によって変わる場合があります。
たとえば、日本語環境では次のように表示されることがあります。
今日は2026/06/07 0:00:00です
日付の表示形式を指定したい場合は、次のように書きます。
C#DateTime today = new DateTime(2026, 6, 7);
string result = string.Format("今日は{0:yyyy/MM/dd}です", today);
Console.WriteLine(result);
出力結果です。
今日は2026/06/07です
{0:yyyy/MM/dd} のように、コロン : の後ろに書式を指定すると、日付の表示形式をコントロールできます。
3. {0}・{1}・{2}の違いと複数の値を埋め込む方法
string.Format では、{0} だけでなく {1} や {2} も使えます。
複数の値を文字列に埋め込むときに使います。
3-1. {0}は1番目、{1}は2番目、{2}は3番目の引数
{0}、{1}、{2} は、それぞれ後ろに渡した引数の順番を表します。
C#string result = string.Format("{0}さんは{1}歳で、{2}に住んでいます", "田中", 30, "東京");
Console.WriteLine(result);
出力結果です。
田中さんは30歳で、東京に住んでいます
対応関係は次のとおりです。
| プレースホルダー | 対応する引数 |
|---|---|
{0} | "田中" |
{1} | 30 |
{2} | "東京" |
最初の引数が {0}、2番目の引数が {1}、3番目の引数が {2} です。
3-2. 複数の変数を1つの文字列に埋め込むサンプル
実際には、変数を使って次のように書くことが多いです。
C#string name = "佐藤";
int age = 28;
string city = "大阪";
string result = string.Format("{0}さんは{1}歳で、{2}に住んでいます", name, age, city);
Console.WriteLine(result);
出力結果です。
佐藤さんは28歳で、大阪に住んでいます
このように、複数の変数を1つの文章にまとめたいときに string.Format は便利です。
3-3. 同じ{0}を複数回使う方法
同じ値を複数回表示したい場合は、同じ {0} を何度も使えます。
C#string name = "田中";
string result = string.Format("{0}さん、こんにちは。{0}さんの注文を確認しました。", name);
Console.WriteLine(result);
出力結果です。
田中さん、こんにちは。田中さんの注文を確認しました。
{0} を2回書いていますが、どちらにも同じ name の値が入ります。
3-4. 引数の順番を入れ替えて表示する方法
{0} や {1} は、必ず順番どおりに書く必要はありません。
C#string firstName = "太郎";
string lastName = "山田";
string result = string.Format("名前:{1} {0}", firstName, lastName);
Console.WriteLine(result);
出力結果です。
名前:山田 太郎
この例では、引数は次の順番で渡しています。
C#firstName, lastName
しかし、表示では {1} を先に書いているため、lastName が先に表示されます。
C#string.Format("名前:{1} {0}", firstName, lastName);
つまり、プレースホルダーの番号を変えれば、表示する順番も自由に変更できます。
3-5. インデックス番号を間違えたときに起こるエラー
{0} や {1} の番号を間違えると、エラーになることがあります。
たとえば、引数を1つしか渡していないのに {1} を使うとエラーです。
C#string result = string.Format("名前:{0} 年齢:{1}", "田中");
Console.WriteLine(result);
このコードでは、{0} に対応する "田中" はありますが、{1} に対応する2番目の引数がありません。
そのため、実行時に FormatException が発生します。
System.FormatException
string.Format を使うときは、プレースホルダーの番号と引数の数が合っているか確認しましょう。
4. C#で0埋めする方法:{0:D5}や{0:00000}の意味
C#の {0} は、値を差し込むだけでなく、書式指定と組み合わせることで0埋めにも使えます。
代表的な書き方は次の2つです。
C#string.Format("{0:D5}", 123)
C#string.Format("{0:00000}", 123)
どちらも、次のような結果になります。
00123
4-1. 0埋めとは?桁数をそろえて00123のように表示すること
0埋めとは、数値の前に 0 を追加して、桁数をそろえることです。
たとえば、次のような表示です。
| 元の数値 | 5桁で0埋め |
|---|---|
| 1 | 00001 |
| 12 | 00012 |
| 123 | 00123 |
| 1234 | 01234 |
| 12345 | 12345 |
商品ID、会員番号、請求書番号、ファイル名の連番などでよく使われます。
たとえば、会員番号を常に5桁で表示したい場合、1 を 00001 と表示します。
4-2. String.Formatで0埋めする基本形:"{0:D桁数}"
整数を0埋めする基本形は次のとおりです。
C#string.Format("{0:D桁数}", 数値)
5桁で0埋めする場合は、次のように書きます。
C#int number = 123;
string result = string.Format("{0:D5}", number);
Console.WriteLine(result);
出力結果です。
00123
D5 は、「10進数として、最低5桁で表示する」という意味です。
4-3. {0:D5}の意味と出力例
{0:D5} は、次のように分解できます。
| 部分 | 意味 |
|---|---|
{} | プレースホルダー全体 |
0 | 1番目の引数 |
: | 書式指定の開始 |
D | 10進数形式で表示 |
5 | 最低5桁で表示 |
サンプルコードです。
C#int number1 = 1;
int number2 = 12;
int number3 = 123;
Console.WriteLine(string.Format("{0:D5}", number1));
Console.WriteLine(string.Format("{0:D5}", number2));
Console.WriteLine(string.Format("{0:D5}", number3));
出力結果です。
00001
00012
00123
D5 は整数の0埋めでよく使われる書き方です。
4-4. {0:00000}の意味と出力例
{0:00000} のように、コロンの後ろに 0 を並べて書く方法もあります。
C#int number = 123;
string result = string.Format("{0:00000}", number);
Console.WriteLine(result);
出力結果です。
00123
00000 は、「5桁ぶんの表示位置を用意し、足りない部分を0で埋める」という意味です。
次のコードを見てください。
C#Console.WriteLine(string.Format("{0:00000}", 1));
Console.WriteLine(string.Format("{0:00000}", 12));
Console.WriteLine(string.Format("{0:00000}", 123));
出力結果です。
00001
00012
00123
{0:D5} と同じような結果になります。
4-5. D指定子と0指定子の違い
{0:D5} と {0:00000} は、整数を0埋めするだけなら似た結果になります。
ただし、意味には違いがあります。
| 書き方 | 種類 | 主な用途 |
|---|---|---|
{0:D5} | 標準の数値書式指定 | 整数を指定桁数で0埋め |
{0:00000} | カスタム数値書式指定 | 自分で桁の形を細かく指定 |
D は Decimal の意味で、整数を10進数として表示するための標準書式指定子です。
一方、00000 は、0を並べて表示形式を自分で作るカスタム書式です。
整数の0埋めだけなら、初心者には {0:D5} のほうが意味を理解しやすくおすすめです。
C#string result = string.Format("{0:D5}", 123);
一方で、小数を含む形式や、より細かい表示をしたい場合はカスタム書式を使います。
C#double value = 12.3;
string result = string.Format("{0:000.00}", value);
Console.WriteLine(result);
出力結果です。
012.30
4-6. 桁数が指定より多い場合はどう表示されるか
0埋めで指定した桁数より、元の数値の桁数が多い場合は、数値が切り捨てられるわけではありません。
C#int number = 123456;
string result = string.Format("{0:D5}", number);
Console.WriteLine(result);
出力結果です。
123456
5桁指定でも、元の数値が6桁であれば、そのまま6桁で表示されます。
{0:00000} でも同じです。
C#int number = 123456;
string result = string.Format("{0:00000}", number);
Console.WriteLine(result);
出力結果です。
123456
0埋めは、あくまで「指定桁数に足りない場合に0を追加する」ものです。
桁数を超えた値を削るものではありません。
5. String.Format以外で0埋めする方法
C#で0埋めする方法は、String.Format だけではありません。
代表的な方法は次の4つです。
| 方法 | 例 |
|---|---|
| String.Format | string.Format("{0:D5}", value) |
| ToString | value.ToString("D5") |
| 文字列補間 | $"{value:D5}" |
| PadLeft | text.PadLeft(5, '0') |
それぞれの使い方を見ていきます。
5-1. ToString("D5")で0埋めする方法
数値そのものに対して ToString("D5") を使うと、0埋めした文字列を作れます。
C#int value = 123;
string result = value.ToString("D5");
Console.WriteLine(result);
出力結果です。
00123
string.Format を使わず、数値を直接文字列に変換したい場合に便利です。
C#int id = 7;
string memberId = id.ToString("D5");
Console.WriteLine(memberId);
出力結果です。
00007
5-2. 文字列補間で$"{value:D5}"と書く方法
現在のC#では、文字列補間を使う書き方もよく使われます。
C#int value = 123;
string result = $"{value:D5}";
Console.WriteLine(result);
出力結果です。
00123
文字列補間では、文字列の先頭に $ を付け、波かっこの中に変数名を書きます。
C#int id = 42;
string result = $"会員番号:{id:D5}";
Console.WriteLine(result);
出力結果です。
会員番号:00042
string.Format("会員番号:{0:D5}", id) よりも、どの変数を表示しているのかがわかりやすいです。
5-3. PadLeftで文字列を0埋めする方法
PadLeft は、文字列の左側を指定した文字で埋めるメソッドです。
C#string text = "123";
string result = text.PadLeft(5, '0');
Console.WriteLine(result);
出力結果です。
00123
PadLeft は数値ではなく、文字列に対して使います。
C#string code = "A12";
string result = code.PadLeft(6, '0');
Console.WriteLine(result);
出力結果です。
000A12
数値の書式指定ではなく、文字列そのものを指定文字で埋めたい場合に便利です。
5-4. String.Format・ToString・文字列補間・PadLeftの使い分け
それぞれの使い分けは次のように考えるとわかりやすいです。
| 方法 | 向いている場面 |
|---|---|
string.Format | 複数の値をテンプレートに埋め込む、既存コードで使われている |
ToString("D5") | 数値だけを0埋め文字列に変換する |
$"{value:D5}" | 読みやすく文字列に値を埋め込みたい |
PadLeft | 文字列を左側から0埋めしたい |
たとえば、数値だけを変換するなら ToString がシンプルです。
C#int value = 123;
string result = value.ToString("D5");
文章の中に値を入れるなら、文字列補間が読みやすいです。
C#int value = 123;
string result = $"番号は{value:D5}です";
文字列を0埋めしたいなら、PadLeft が適しています。
C#string value = "ABC";
string result = value.PadLeft(5, '0');
5-5. 初心者にはどの書き方がおすすめか
初心者には、まず次の2つを覚えるのがおすすめです。
C#string.Format("{0:D5}", value)
C#$"{value:D5}"
古いコードや既存システムでは string.Format がよく出てきます。そのため、{0} の意味を理解しておくことは重要です。
一方で、自分で新しくコードを書く場合は、文字列補間のほうが読みやすいことが多いです。
C#int id = 12;
// String.Format
string a = string.Format("会員番号:{0:D5}", id);
// 文字列補間
string b = $"会員番号:{id:D5}";
どちらも出力は同じです。
会員番号:00012
既存コードを読むためには String.Format、新しく書くコードでは文字列補間、という意識で覚えるとよいでしょう。
6. {0}でよく使う書式指定のパターン
{0} は、0埋め以外にもさまざまな書式指定に使えます。
ここでは、実務でもよく使う書式指定を紹介します。
6-1. 数値を桁区切りで表示する:{0:N0}
数値をカンマ区切りで表示したい場合は、{0:N0} を使います。
C#int amount = 1234567;
string result = string.Format("{0:N0}", amount);
Console.WriteLine(result);
出力結果です。
1,234,567
N0 の N は数値形式、0 は小数点以下の桁数を表します。
金額や数量を見やすく表示するときによく使います。
C#int price = 98000;
string result = string.Format("価格:{0:N0}円", price);
Console.WriteLine(result);
出力結果です。
価格:98,000円
6-2. 小数点以下の桁数を指定する:{0:F2}
小数点以下の桁数を固定したい場合は、{0:F2} を使います。
C#double value = 12.3456;
string result = string.Format("{0:F2}", value);
Console.WriteLine(result);
出力結果です。
12.35
F2 は、小数点以下2桁で表示するという意味です。
四捨五入された結果が表示されます。
C#double value = 3.1;
string result = string.Format("{0:F2}", value);
Console.WriteLine(result);
出力結果です。
3.10
小数点以下の桁数をそろえたい場合に便利です。
6-3. パーセント表示にする:{0:P}
割合をパーセント表示にしたい場合は、{0:P} を使います。
C#double rate = 0.25;
string result = string.Format("{0:P}", rate);
Console.WriteLine(result);
出力例です。
25.00%
小数点以下の桁数を指定したい場合は、P0 や P1 のように書きます。
C#double rate = 0.256;
Console.WriteLine(string.Format("{0:P0}", rate));
Console.WriteLine(string.Format("{0:P1}", rate));
出力結果です。
26%
25.6%
P は値に100を掛けて、パーセント記号を付けて表示します。
6-4. 日付を指定形式で表示する:{0:yyyy/MM/dd}
日付を指定した形式で表示する場合は、次のように書きます。
C#DateTime date = new DateTime(2026, 6, 7);
string result = string.Format("{0:yyyy/MM/dd}", date);
Console.WriteLine(result);
出力結果です。
2026/06/07
よく使う日付形式には、次のようなものがあります。
C#DateTime date = new DateTime(2026, 6, 7, 9, 5, 0);
Console.WriteLine(string.Format("{0:yyyy/MM/dd}", date));
Console.WriteLine(string.Format("{0:yyyy年MM月dd日}", date));
Console.WriteLine(string.Format("{0:HH:mm}", date));
Console.WriteLine(string.Format("{0:yyyy/MM/dd HH:mm}", date));
出力結果です。
2026/06/07
2026年06月07日
09:05
2026/06/07 09:05
6-5. 金額表示に使う書式指定
金額表示では、桁区切りを使うことが多いです。
C#int price = 123456;
string result = string.Format("{0:N0}円", price);
Console.WriteLine(result);
出力結果です。
123,456円
通貨形式として表示したい場合は、C を使うこともできます。
C#int price = 123456;
string result = string.Format("{0:C}", price);
Console.WriteLine(result);
日本語環境では、次のように表示されることがあります。
¥123,456
ただし、C は実行環境のカルチャ設定によって通貨記号や表示形式が変わります。
日本円として固定したい場合は、実務では N0 と "円" を組み合わせるほうがわかりやすい場合もあります。
C#string result = string.Format("{0:N0}円", price);
6-6. よく使う書式指定子の一覧表
{0} と一緒によく使う書式指定子をまとめると、次のようになります。
| 書式 | 意味 | 例 | 出力例 |
|---|---|---|---|
{0} | そのまま表示 | 123 | 123 |
{0:D5} | 整数を5桁で0埋め | 123 | 00123 |
{0:00000} | 5桁のカスタム0埋め | 123 | 00123 |
{0:N0} | 桁区切り、小数なし | 1234567 | 1,234,567 |
{0:N2} | 桁区切り、小数2桁 | 1234.5 | 1,234.50 |
{0:F2} | 小数2桁 | 12.345 | 12.35 |
{0:P0} | パーセント、小数なし | 0.256 | 26% |
{0:yyyy/MM/dd} | 日付 | 2026-06-07 | 2026/06/07 |
{0:HH:mm} | 時刻 | 9:05 | 09:05 |
まずは、0埋めの {0:D5}、桁区切りの {0:N0}、小数の {0:F2}、日付の {0:yyyy/MM/dd} を覚えると実務で役立ちます。
7. 初心者がつまずきやすい{0}と0埋めの注意点
{0} や0埋めは便利ですが、初心者がつまずきやすいポイントもあります。
ここでは、よくある注意点を解説します。
7-1. {0}の中の0と0埋めの0を混同しない
まず大切なのは、{0} の 0 と、0埋めの 0 は意味が違うということです。
C#string.Format("{0}", 123)
この {0} の 0 は、1番目の引数を表す番号です。
一方、次の 0 は0埋めのための書式です。
C#string.Format("{0:00000}", 123)
分解すると次のようになります。
| 部分 | 意味 |
|---|---|
{0} | 1番目の引数を表示 |
{0:D5} | 1番目の引数を5桁で0埋め |
{0:00000} | 1番目の引数を5桁のカスタム形式で表示 |
特に c# 0 や C# {0} で調べている人は、{0} の0と0埋めの0を混同しやすいです。
{0} の0は「引数の順番」、D5 や 00000 の0は「表示形式」と覚えましょう。
7-2. 引数の数が足りないとFormatExceptionになる
string.Format では、プレースホルダーに対応する引数が必要です。
次のコードはエラーになります。
C#string result = string.Format("{0}さんは{1}歳です", "田中");
{0} に対応する "田中" はありますが、{1} に対応する2番目の引数がありません。
そのため、実行時に FormatException が発生します。
正しくは次のように書きます。
C#string result = string.Format("{0}さんは{1}歳です", "田中", 25);
Console.WriteLine(result);
出力結果です。
田中さんは25歳です
プレースホルダーの最大番号を確認し、それに対応する引数を渡すようにしましょう。
7-3. 波かっこ{}を文字として表示したい場合の書き方
string.Format では、{} は特別な意味を持ちます。
そのため、波かっこ自体を文字として表示したい場合は、波かっこを2つ重ねます。
C#string result = string.Format("{{0}}");
Console.WriteLine(result);
出力結果です。
{0}
左波かっこ { を表示したい場合は {{、右波かっこ } を表示したい場合は }} と書きます。
C#string result = string.Format("値は {{ {0} }} です", 123);
Console.WriteLine(result);
出力結果です。
値は { 123 } です
JSON風の文字列やテンプレート文字列を作るときに、このルールを知らないとエラーになりやすいです。
7-4. 文字列と数値で使える書式指定が違う
書式指定は、値の型によって使えるものが違います。
たとえば、D5 は整数の0埋めに使う書式です。
C#int number = 123;
string result = string.Format("{0:D5}", number);
Console.WriteLine(result);
出力結果です。
00123
しかし、文字列に対して D5 を使っても、数値の0埋めのようには扱えません。
文字列を0埋めしたい場合は、PadLeft を使うのが基本です。
C#string text = "123";
string result = text.PadLeft(5, '0');
Console.WriteLine(result);
出力結果です。
00123
数値の表示形式を整えたいのか、文字列の長さをそろえたいのかを区別しましょう。
7-5. nullを渡した場合の表示
string.Format に null を渡した場合、基本的には空文字として表示されます。
C#string name = null;
string result = string.Format("名前:{0}", name);
Console.WriteLine(result);
出力結果です。
名前:
null という文字が表示されるわけではありません。
null の場合に別の文字を表示したいなら、事前に変換しておくとよいです。
C#string name = null;
string displayName = name ?? "未設定";
string result = string.Format("名前:{0}", displayName);
Console.WriteLine(result);
出力結果です。
名前:未設定
?? は、左側が null の場合に右側の値を使う演算子です。
7-6. カルチャによって日付や数値の表示が変わる場合がある
String.Format の結果は、実行環境のカルチャによって変わることがあります。
たとえば、通貨形式の {0:C} や日付の標準表示は、環境によって表示が異なる場合があります。
C#decimal price = 1234;
string result = string.Format("{0:C}", price);
Console.WriteLine(result);
日本語環境では、次のように表示されることがあります。
¥1,234
一方、別のカルチャでは通貨記号や区切り文字が変わる可能性があります。
日付も同様です。
C#DateTime date = new DateTime(2026, 6, 7);
string result = string.Format("{0}", date);
環境によって、2026/06/07 0:00:00 のように表示されたり、別の形式で表示されたりする場合があります。
表示形式を固定したい場合は、次のように明示的に書式を指定しましょう。
C#string result = string.Format("{0:yyyy/MM/dd}", date);
出力結果です。
2026/06/07
8. 実務で使えるString.Formatと0埋めのサンプル
ここからは、実務で使いやすい String.Format と0埋めのサンプルを紹介します。
8-1. 商品IDや会員番号を00001形式で表示する
商品IDや会員番号を5桁で表示したい場合は、{0:D5} が便利です。
C#int memberNumber = 1;
string memberId = string.Format("{0:D5}", memberNumber);
Console.WriteLine(memberId);
出力結果です。
00001
文章と組み合わせる場合は、次のように書きます。
C#int memberNumber = 42;
string result = string.Format("会員番号:{0:D5}", memberNumber);
Console.WriteLine(result);
出力結果です。
会員番号:00042
データベース上は 42 のような数値で持ち、画面表示では 00042 のように見せるケースでよく使います。
8-2. ファイル名に連番を付ける
画像やCSVなどのファイル名に連番を付ける場合にも、0埋めは便利です。
C#for (int i = 1; i <= 3; i++)
{
string fileName = string.Format("image_{0:D3}.png", i);
Console.WriteLine(fileName);
}
出力結果です。
image_001.png
image_002.png
image_003.png
連番を0埋めしておくと、ファイル一覧で並べたときに順番が崩れにくくなります。
たとえば、image_1.png、image_10.png、image_2.png のような並びを避けたい場合に役立ちます。
8-3. 日付と番号を組み合わせたコードを作る
日付と番号を組み合わせて、管理コードを作ることもできます。
C#DateTime date = new DateTime(2026, 6, 7);
int number = 12;
string code = string.Format("{0:yyyyMMdd}-{1:D4}", date, number);
Console.WriteLine(code);
出力結果です。
20260607-0012
このような形式は、注文番号、受付番号、処理番号などで使われます。
文字列補間で書く場合は、次のようになります。
C#DateTime date = new DateTime(2026, 6, 7);
int number = 12;
string code = $"{date:yyyyMMdd}-{number:D4}";
Console.WriteLine(code);
出力結果は同じです。
20260607-0012
8-4. ログメッセージを見やすく整形する
ログメッセージを作るときにも string.Format は使えます。
C#DateTime now = new DateTime(2026, 6, 7, 10, 30, 0);
int userId = 123;
string action = "Login";
string log = string.Format("[{0:yyyy/MM/dd HH:mm:ss}] UserId={1:D5}, Action={2}", now, userId, action);
Console.WriteLine(log);
出力結果です。
[2026/06/07 10:30:00] UserId=00123, Action=Login
日付、ユーザーID、操作内容などを決まった形式で出力すると、ログが読みやすくなります。
8-5. 請求書番号や注文番号を桁数固定で作る
請求書番号や注文番号でも、0埋めはよく使われます。
C#int invoiceNumber = 78;
string invoiceCode = string.Format("INV-{0:D6}", invoiceNumber);
Console.WriteLine(invoiceCode);
出力結果です。
INV-000078
注文番号の例です。
C#DateTime orderDate = new DateTime(2026, 6, 7);
int orderNumber = 345;
string orderCode = string.Format("ORD-{0:yyyyMMdd}-{1:D5}", orderDate, orderNumber);
Console.WriteLine(orderCode);
出力結果です。
ORD-20260607-00345
このように、String.Format と0埋めを組み合わせると、見やすく統一されたコードを作れます。
9. String.Formatと文字列補間はどちらを使うべき?
C#で文字列に値を埋め込む方法には、String.Format のほかに文字列補間があります。
文字列補間は、次のように $ を使う書き方です。
C#string name = "田中";
string message = $"こんにちは、{name}さん";
では、String.Format と文字列補間はどちらを使うべきなのでしょうか。
9-1. 現在のC#では文字列補間が読みやすいケースが多い
現在のC#では、文字列補間のほうが読みやすいケースが多いです。
String.Format の例です。
C#string name = "田中";
int age = 25;
string result = string.Format("{0}さんは{1}歳です", name, age);
文字列補間の例です。
C#string name = "田中";
int age = 25;
string result = $"{name}さんは{age}歳です";
文字列補間では、変数名がそのまま文字列の中に出てくるため、どの値がどこに入るのかがわかりやすいです。
特に、引数が多い場合は違いが大きくなります。
C#string result = string.Format("{0}さんは{1}歳で、{2}に住んでいます", name, age, city);
C#string result = $"{name}さんは{age}歳で、{city}に住んでいます";
下のほうが読みやすいと感じる人が多いでしょう。
9-2. String.Formatが今でも使われる場面
文字列補間が便利でも、String.Format が不要になったわけではありません。
String.Format は、次のような場面で今でも見かけます。
| 場面 | 理由 |
|---|---|
| 既存コード | 古いC#コードではよく使われている |
| 翻訳・多言語対応 | 文言テンプレートと値を分けやすい |
| 動的なフォーマット | テンプレート文字列を外部から受け取る場合に使いやすい |
| ログやメッセージ | 既存の仕組みで使われていることがある |
たとえば、次のようにメッセージテンプレートを別で管理する場合です。
C#string template = "{0}さん、注文番号{1}を受け付けました。";
string message = string.Format(template, "田中", "A001");
テンプレートが外部ファイルやデータベースにある場合、string.Format の形式が使いやすいことがあります。
9-3. 既存コードを読むために{0}の理解が必要な理由
新しくコードを書くときは文字列補間を使うとしても、既存コードでは String.Format が使われていることが多くあります。
C#string message = string.Format("エラーコード:{0:D5}、内容:{1}", errorCode, errorMessage);
このコードを読むには、次の知識が必要です。
| 書き方 | 意味 |
|---|---|
{0} | 1番目の引数 |
{1} | 2番目の引数 |
{0:D5} | 1番目の引数を5桁で0埋め |
{0} の意味を知らないと、どの値がどこに入るのか理解しづらくなります。
そのため、C#初心者でも String.Format と {0} の基本は理解しておくべきです。
9-4. 初心者向けの使い分け基準
初心者向けには、次の基準で使い分けるとよいです。
| 目的 | おすすめ |
|---|---|
| 新しくシンプルな文字列を作る | 文字列補間 |
| 既存コードを読む | String.Format の理解が必要 |
| テンプレート文字列を外部管理する | String.Format |
| 数値だけ0埋めする | ToString("D5") |
| 文字列を0埋めする | PadLeft |
新しく書くなら、まずは文字列補間を使うと読みやすいです。
C#string result = $"{name}さんは{age}歳です";
ただし、{0} を使ったコードも読めるようにしておくと、既存のC#コードを理解しやすくなります。
9-5. String.Formatから文字列補間へ書き換える例
String.Format のコードを文字列補間に書き換える例を見てみましょう。
まずは String.Format のコードです。
C#string name = "田中";
int age = 25;
string result = string.Format("{0}さんは{1}歳です", name, age);
文字列補間にすると、次のようになります。
C#string name = "田中";
int age = 25;
string result = $"{name}さんは{age}歳です";
0埋めを含む場合も書き換えられます。
C#int id = 42;
string result = string.Format("会員番号:{0:D5}", id);
文字列補間では次のように書きます。
C#int id = 42;
string result = $"会員番号:{id:D5}";
出力結果はどちらも同じです。
会員番号:00042
日付も同じように書けます。
C#DateTime date = new DateTime(2026, 6, 7);
string result = string.Format("日付:{0:yyyy/MM/dd}", date);
文字列補間では次のようになります。
C#DateTime date = new DateTime(2026, 6, 7);
string result = $"日付:{date:yyyy/MM/dd}";
出力結果です。
日付:2026/06/07
10. C#の{0}と0埋めに関するよくある質問
最後に、C#の {0} と0埋めに関するよくある質問をまとめます。
10-1. {0}の0はなぜ0から始まるのですか?
C#では、配列やリストなど多くの場面で番号が0から始まります。
string.Format の {0} も同じように、最初の引数を0番目として扱います。
C#string.Format("{0} {1} {2}", "A", "B", "C");
対応関係は次のとおりです。
| 番号 | 値 |
|---|---|
{0} | "A" |
{1} | "B" |
{2} | "C" |
{0} は1番目の引数、{1} は2番目の引数、{2} は3番目の引数です。
10-2. {0}と$"{変数}"は何が違いますか?
{0} は String.Format で使うプレースホルダーです。
C#string name = "田中";
string result = string.Format("こんにちは、{0}さん", name);
一方、 $"{変数}" は文字列補間です。
C#string name = "田中";
string result = $"こんにちは、{name}さん";
どちらも文字列に値を埋め込むための書き方ですが、文字列補間のほうが変数名を直接書けるため読みやすいことが多いです。
ただし、既存コードでは String.Format もよく使われているため、{0} の意味は理解しておきましょう。
10-3. {0:D3}と{0:000}は同じですか?
整数を3桁で0埋めするだけなら、似た結果になります。
C#int value = 12;
Console.WriteLine(string.Format("{0:D3}", value));
Console.WriteLine(string.Format("{0:000}", value));
出力結果です。
012
012
ただし、意味は少し違います。
{0:D3} は標準の数値書式指定で、整数を最低3桁で表示します。{0:000} はカスタム数値書式指定で、0を3つ並べた形式に合わせて表示します。
整数の0埋めでは {0:D3} を使うとわかりやすいです。
10-4. 小数や負の数も0埋めできますか?
負の整数も0埋めできます。
C#int value = -12;
string result = string.Format("{0:D5}", value);
Console.WriteLine(result);
出力結果です。
-0012
マイナス記号を除いた数値部分が0埋めされます。
小数の場合は、D 指定子ではなくカスタム書式を使います。
C#double value = 12.3;
string result = string.Format("{0:000.00}", value);
Console.WriteLine(result);
出力結果です。
012.30
整数の0埋めは D5、小数を含む細かい形式は 000.00 のようなカスタム書式、と覚えるとよいです。
10-5. 文字列を0埋めしたい場合はどうしますか?
文字列を0埋めしたい場合は、PadLeft を使います。
C#string text = "123";
string result = text.PadLeft(5, '0');
Console.WriteLine(result);
出力結果です。
00123
英数字を含む文字列でも使えます。
C#string code = "A12";
string result = code.PadLeft(6, '0');
Console.WriteLine(result);
出力結果です。
000A12
{0:D5} は数値向けの0埋めです。
文字列を指定の長さにそろえたい場合は、PadLeft を使いましょう。
10-6. String.Formatは古い書き方ですか?
String.Format は古いコードでもよく使われる書き方ですが、今でも使われる場面はあります。
ただし、新しくシンプルな文字列を作る場合は、文字列補間のほうが読みやすいことが多いです。
C#// String.Format
string result1 = string.Format("{0}さんは{1}歳です", name, age);
// 文字列補間
string result2 = $"{name}さんは{age}歳です";
文字列補間のほうが、どの変数がどこに入るのか一目でわかります。
一方で、既存コード、外部テンプレート、多言語対応などでは String.Format が使われることもあります。
そのため、String.Format は「もう使わない古い知識」ではなく、「既存コードを読むためにも必要な基本知識」と考えるとよいでしょう。
まとめ
C#の {0} は、String.Format で値を差し込むためのプレースホルダーです。
C#string result = string.Format("こんにちは、{0}さん", "田中");
出力結果です。
こんにちは、田中さん
{0} の 0 は、数値のゼロを表示するという意味ではなく、「1番目の引数」を表す番号です。
複数の値を使う場合は、{0}、{1}、{2} のように番号を増やします。
C#string result = string.Format("{0}さんは{1}歳です", "田中", 25);
出力結果です。
田中さんは25歳です
また、0埋めをしたい場合は、次のように書きます。
C#string result = string.Format("{0:D5}", 123);
出力結果です。
00123
{0:D5} は、「1番目の引数を5桁で0埋めする」という意味です。
同じような結果は、次の方法でも実現できます。
C#123.ToString("D5")
C#$"{123:D5}"
C#"123".PadLeft(5, '0')
使い分けの目安は次のとおりです。
| やりたいこと | おすすめ |
|---|---|
既存の String.Format を理解する | {0} の意味を覚える |
| 整数を0埋めする | {0:D5} または ToString("D5") |
| 新しく読みやすいコードを書く | 文字列補間 $"{value:D5}" |
| 文字列を0埋めする | PadLeft(5, '0') |
C#の {0} は、最初は少しわかりにくく見えますが、意味はシンプルです。
{0} は1番目の引数、{1} は2番目の引数。{0:D5} は、1番目の引数を5桁で0埋め。
この2つを押さえておけば、String.Format の基本的なコードはかなり読みやすくなります。

