C# 入門

ホーム > C# の基礎 > 文字列補間

文字列補間

ここでは C# 6.0 で導入された、文字列補間 (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 以降です。

それ以前ではエラーになるので注意しましょう。

文字列補間 (ストリング・インターポレーション) では、次のような形でフォーマット文字列に変数値を埋め込むことができます。

using System;

namespace Test1
{
	class MainClass
	{
		public static void Main(string[] args)
		{
			var name = "Ichiro Yamada";
			Console.WriteLine ($"Hi, my name is {name}." );
		}
	}
}

フォーマット文字列に $ サインを付けます。そして、フォーマット文字列中に { } で変数名を設定します。これで { } で指定した箇所に、その変数値が埋め込まれます。

この方法なら前述のインデックスの問題は発生しない上に、より直感的にフォーマットの意味を把握することが可能になります。

また、以前と同様に 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

2番目の today の出力時には日付だけになっていますね。

以上、C# 6.0 で導入された文字列補間について説明しました。

ホーム > C# の基礎 > 文字列補間