文字列の開始のダブルクオーテーション「"」の前に「$」が記述されている - 文字列補間の利用 - 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を愛用
掲載日: 2022-11-28
iPentec all rights reserverd.