C# 文字列の文字列補間
ここでは C# の 文字列補間 (string interpolation) について説明します。 文字列補間はテンプレート文字列などとも呼ばれます。
文字列補間を利用しない場合の問題点
C# 6.0 よりも前のバージョンでは、文字列のフォーマットを行うためには次のようにしました。
using System;
namespace Test1
{
class MainClass
{
public static void Main(string[] args)
{
var name = "Ichiro Yamada";
Console.WriteLine ("Hi, my name is {0}.", name);
}
}
}
この結果は次のようになります。
Hi, my name is Ichiro Yamada.
文字列補間を利用しない場合は、フォーマット文字列の中に 0 ベースのインデックスで {0}, {1}, ... 等のようにして {} を使って変数値を挿入する箇所を指定します。
そこに、任意個数のパラメータの該当する変数の値が挿入されます。
この方法の問題点は、変数が多数ある場合にインデックスが管理しきれなくなるということです。
例えば8個の変数を出力するコードがあって、それに9個目の変数を挿入して、その後で6個目の変数を削除するとしたらインデックスを書き直すのは面倒ですし、間違いも多くなるでしょう。
こうした問題点を解決するために、C# 6.0 で 文字列補間 (string interpolation) が導入されました。
C# 6.0 は 2015年 7 月リリースの .NET Framework 4.6 以降です。Visual Studio のサポートは Visual Studio 2015 以降です。
それ以前ではエラーになるので注意しましょう。
C# の文字列補間の方法
C# の文字列補間 (ストリング・インターポレーション) では、次の形式でフォーマット文字列に変数値を埋め込むことができます。
$"...{変数1}...{変数2}"
フォーマット文字列に $ を付けます。これで文字列補間を使うことを示します。
そして、フォーマット文字列中に { } で変数名を指定します。 これで { } で指定した箇所に、その変数値が埋め込まれます。
具体的には次のようにします。
using System;
namespace Test1
{
class MainClass
{
public static void Main(string[] args)
{
var name = "Ichiro Yamada";
Console.WriteLine ($"Hi, my name is {name}." );
}
}
}
この方法なら前述のインデックスの問題は発生しない上に、より直感的にフォーマットの意味を把握することが可能になります。
C# の文字列補間とフォーマットの指定
文字列補間では変数名を指定する上に、さらにフォーマットを指定することもできます。
次の例では DateTime 型の変数にフォーマットを指定しています。
using System;
namespace Test1
{
class MainClass
{
public static void Main(string[] args)
{
var today = DateTime.Now;;
Console.WriteLine ($"{today}");
Console.WriteLine ($"{today:M/d/yy}");
}
}
}
この結果は次のようになります。
6/2/2017 1:57:25 AM
6/2/17
11行目の 2 番目の today の出力時には日付だけになっていますね。
以上、C# の文字列補間について説明しました。