FormattableString を利用して、文字列補間の情報を取得するコードを紹介します。
概要
文字列補間で、元の形式の文字列や、埋め込まれた各パラメーターの値を取得したい場合があります。
この記事では、FormattableString オブジェクトを利用して、文字列補間の情報を取得するコードを紹介します。
プログラム例
UI
下図のフォームを作成します。今回のデモでは1つのボタンを利用します。
コード
以下のコードを記述します。
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