文字列補間の情報を取得する - FormattableString の利用 - C#

FormattableString を利用して、文字列補間の情報を取得するコードを紹介します。

概要

文字列補間で、元の形式の文字列や、埋め込まれた各パラメーターの値を取得したい場合があります。 この記事では、FormattableString オブジェクトを利用して、文字列補間の情報を取得するコードを紹介します。

プログラム例

UI

下図のフォームを作成します。今回のデモでは1つのボタンを利用します。

コード

以下のコードを記述します。
FormMain.cs
using System.Runtime.CompilerServices;

namespace FormattableString
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button2_Click(object sender, EventArgs e)
    {
      string name = "ぺんぎんクッキー";
      int stock = 18;
      System.FormattableString fs = $"Product:{name} - Stock:{stock:d}";

      textBox1.Text += "パラメーターの個数:"+fs.ArgumentCount.ToString()+"\r\n";
      textBox1.Text += "フォーマット文字列:"+fs.Format + "\r\n";

      if (fs.GetArgument(0) != null) {
        textBox1.Text += "パラメーター1:" + fs.GetArgument(0)!.ToString() + "\r\n";
      }
      if (fs.GetArgument(1) != null) {
        textBox1.Text += "パラメーター2:" + fs.GetArgument(1)!.ToString() + "\r\n";
      }
      textBox1.Text += "文字列:" + fs;
    }
  }
}

解説

文字列補間に埋め込むパラメーターの変数を準備します。
  string name = "ぺんぎんクッキー";
  int stock = 18;

文字列補間の文字列を用意します。値はFormattableStringオブジェクトに代入します。 文字列補間の動作の詳細はこちらの記事を参照して下さい。
  System.FormattableString fs = $"Product:{name} - Stock:{stock:d}";

文字列補間で埋め込まれるパラメーターの数を取得します。今回のデモでは2つの変数があるため、2になります。
  textBox1.Text += "パラメーターの個数:"+fs.ArgumentCount.ToString()+"\r\n";

フォーマットの文字列を取得します。String.Formatメソッドでのフォーマット文字列の形式になります。
  textBox1.Text += "フォーマット文字列:"+fs.Format + "\r\n";

文字列補間に埋め込まれるパラメーターの値を取得します。値は、GetArgument()メソッドでパラメーターを取得できます。取得したいパラメーターの順番をGetArgumentの引数に与えます。
今回の例では、1つ目のパラメーターに"ぺんぎんクッキー"、2つ目のパラメーターに"18"が表示される動作になります。
  if (fs.GetArgument(0) != null) {
    textBox1.Text += "パラメーター1:" + fs.GetArgument(0)!.ToString() + "\r\n";
  }
  if (fs.GetArgument(1) != null) {
    textBox1.Text += "パラメーター2:" + fs.GetArgument(1)!.ToString() + "\r\n";
  }

メモ
パラメーターをまとめて取得する場合は、GetArguments() メソッドも利用する方法もあります。
  object[] obj = fs.GetArguments()!;
  foreach (object j in obj) {
    if (j != null) {
      textBox1.Text += "パラメーター:" + j.ToString() + "\r\n";
    }
  }

文字列補間の出力文字をテキストボックスに表示します。
今回の例ではパラメーターが埋め込まれた文字列「Product:ぺんぎんクッキー - Stock:18」が表示されます。
  textBox1.Text += "文字列:" + fs;

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button2]をクリックします。文字列補間の情報が画面に表示されます。


文字列補間で、元の形式の文字列や、埋め込まれた各パラメーターの値を取得できました。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-11-29
作成日: 2022-11-29
iPentec all rights reserverd.