文字列の開始のダブルクオーテーション「"」の前に「$」が記述されている - 文字列補間の利用 - C#
文字列の開始のダブルクオーテーション「"」の前に「$」が記述されている文字列について紹介します。
概要
文字列の開始のダブルクオーテーション「"」の前に「$」が記述されている文字列は「文字列補間」と呼ばれており、プレースホルダーを設定して、変数の値などを埋め込んで表示できます。
String.Format() メソッドと似た動作になります。
string output = $"商品名 {item.Name} - 価格 {price:F2}"
書式
書式は次の通りです。
文字列内に
{
}
でプレースホルダーを設定できます。プレースホルダーの書式は次の通りです。
書式形式はFormatメソッドと同じ形式です。詳しくは
こちらの記事を参照してください。
プログラム例
Windows Formアプリケーションを作成します。
UI
下図のフォームを作成します。
コード
下記コードを記述します。
using System.Diagnostics;
using System.Xml.Linq;
namespace InterpolatedString
{
public partial class FormMain : Form
{
public FormMain()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string name = "ぺんぎんクッキー";
int stock = 24;
double price = 8.25f;
string str = $"商品:{name} - 在庫:{stock} - 価格:{price:F2}";
textBox1.Text += str;
}
private void button2_Click(object sender, EventArgs e)
{
string name1 = "ぺんぎんクッキー";
string name2 = "らくだキャラメル";
string name3 = "しろくまアイス";
string str = $"{name1,32} : {name2,-32} : {name3,48}";
textBox1.Text += str;
}
private void button3_Click(object sender, EventArgs e)
{
int score = 80;
string str1 = $"得点:{score} - {score switch { < 50 => "不合格", _ => "合格" }}\r\n";
textBox1.Text += str1;
string str2 = $"{(score>90 ? "good!" : "...") }\r\n";
textBox1.Text += str2;
}
}
}
解説
button1
プレースホルダーに表示する変数の値を設定します。
string name = "ぺんぎんクッキー";
int stock = 24;
double price = 8.25f;
文字列補間の文字列を作成し、string変数に代入します。
{name}
部分にname変数の値が、
{stock}
部分にstock変数の値が値が埋め込まれます。
{price:F2}
部分にはprice変数の値が埋め込まれますが、F2が指定されており、小数点2桁の表示となります。
string str = $"商品:{name} - 在庫:{stock} - 価格:{price:F2}";
文字列をテキストボックスに表示します。
textBox1.Text += str;
button2
string name1 = "ぺんぎんクッキー";
string name2 = "らくだキャラメル";
string name3 = "しろくまアイス";
文字列補間の文字列を作成し、string変数に代入します。
{name1,32}
部分にname1変数の値が埋め込まれます。
最低でも32文字で表現するため、name1の値が32文字以下の場合は、左側に空白文字が埋められ、32文字で表現されます。
{name2,-32}
部分にname2変数の値が値が埋め込まれます。
こちらも最低32文字で表現されますが、name2の値が32文字以下の場合は、右側に空白文字が埋められ、32文字で表現されます。
{name3,48}
には、name3変数の値が埋め込まれ、name3変数が48文字以下の場合は、左側に空白文字が埋められます。
string str = $"{name1,32} : {name2,-32} : {name3,48}";
文字列をテキストボックスに表示します。
textBox1.Text += str;
button3
プレースホルダーに埋め込む変数の値を設定します。
int score = 80;
プレースホルダーに変数の値を埋め込みます。さらに、変数の値が 50以下の場合とそれ以外の場合で異なる文字列を代入します。
文字列をテキストボックスに表示します。
string str1 = $"得点:{score} - {score switch { < 50 => "不合格", _ => "合格" }}\r\n";
textBox1.Text += str1;
こちらは、変数の値が90より大きい場合とそうでない場合で代入する文字列を変更します。
string str2 = $"{(score>90 ? "good!" : "...") }\r\n";
textBox1.Text += str2;
実行結果
プロジェクトを実行します。下図のウィンドウが表示されます。
[button1]をクリックします。プレースホルダーに変数の値が埋め込まれて文字列が表示されます。
[button2]をクリックします。プレースホルダーに文字列が埋め込まれますが、最長の長さが設定され、右寄せ、左寄せで文字列が表示されます。
[button3]をクリックします。プレースホルダーに文字列が埋め込まれて表示されます。変数の値に応じてメッセージの内容が変化することが確認できます。
プレースホルダーに埋め込まれるタイミング
下記のコードを実行します。
private void button4_Click(object sender, EventArgs e)
{
string name = "ぺんぎんクッキー";
int stock = 314;
string str = $"商品:{name} - 在庫:{stock}";
name = "らくだキャラメル";
textBox1.Text += str;
}
実行すると、「ぺんぎんクッキー」の文字列が表示されます。文字列補間の文字列をstring型の変数に代入したタイミングで、プレースホルダー部の埋め込みが実行されるため、
埋め込み後に、name変数の値を「らくだキャラメル」に変更しても文字列は埋め込み実行時点のままとなります。
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用