Format関数の出力で中かっこ "{" "}" を表示する

C#でFormat関数で中かっこを表示するコードを紹介します。

概要

C#のFormat関数では、複合書式設定を利用した場合、中かっこ"{","}"により、書式指定項目を設定します。そのため、単純に中かっこを記述した場合、書式指定項目と認識され、エラーになることがあります。

対応方法

Format関数の複合書式設定で中かっこを表示する場合は中かっこを2つ続けて記述します。

中かっこのエスケープ
出力する文字列複合書式設定に記述する文字列
{{{
}}}

サンプル

UI

以下のUIを作成します。フォームにTextBoxとButtonを1つずつ配置します。

コード

以下のコードを記述します。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BracesEscapeDemo
{
  public partial class FormMain : Form
  {
    public FormMain()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      int value = 4096;
      textBox1.Text += string.Format("{{value}}:{0:d}", value);
    }
  }
}

実行結果

プロジェクトを実行します。下図のフォームが表示されます。


ボタンをクリックします。テキストボックスに結果が表示されます。下図の結果となりました。


Format関数の出力で、中かっこが出力できていることが確認できます。

注意

下記のコードのように、中かっこが入れ子になった場合、意図したとおりの動作にならない場合があります。
textBox1.Text += string.Format("{{value:{0:d}}}", value);

3個続けて"}"がある場合、先頭から2つ目までが文字の「}」と判断されるため、意図した動作になりません。


意図した通りの結果を表示する場合は下記のコードに変更します。

例1: 中かっこ部分をFormat関数に含めないコード

textBox1.Text += "{"+string.Format("value:{0:d}", value)+"}";

例2: 中かっこをFormat関数の書式指定項目で出力するコード

textBox1.Text += string.Format("{0}value:{1:d}{2}", "{", value, "}");

実行すると下図の結果となり、意図した動作になっています。

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
掲載日: 2014-12-03
改訂日: 2023-03-26
iPentec all rights reserverd.