C#のstring.Formatと文字列補間

C#のフォーマット文字列についてです。
フォーマット文字列ではstring.Formatと文字列補間があります。

たとえば、「今日は2018-12-01です。現在の時刻は19:10:00です。」と出力したい場合、
string.Formatを使用すると次のように書くことができます。

var date = DateTime.Now;
var text = string.Format("今日は{0:yyyy-MM-dd}です。現在の時刻は{1:HH:mm:ss}です。", date, date);
Console.WriteLine(text);

これを文字列補間の場合は次のように書くことができます。

var date = DateTime.Now;
var text = $"今日は{date:yyyy-MM-dd}です。現在の時刻は{date:HH:mm:ss}です。";
Console.WriteLine(text);

文字列補間では文字列を表すダブルクォーテーションの前に $ をつけます。
そうすることで文字列中の{ }の中で変数やメソッドなどを使用できるようになります。
また、string.Formatのときと同様にコロンで書式を指定することもできます。

別の例として、
変数が多い場合、string.Formatだと次のようになります。

var a = 3;
var b = 20;
var c = 41;
var text = string.Format("a = {0}, b = {1}, c = {2}, a * b = {3}, b * c = {4}, c * a = {5}, a * b * c = {6}", a, b, c, a * b, b * c, c * a, a * b * c);
Console.WriteLine(text);

引数が多いとstring.Formatでは{3}や{6}が何の変数なのか、ひと目でわかりにくいですが
文字列補間では次のようになります。

var a = 3;
var b = 20;
var c = 41;
var text = $"a = {a}, b = {b}, c = {c}, a * b = {a * b}, b * c = {b * c}, c * a = {c * a}, a * b * c = {a * b * c}";
Console.WriteLine(text);

文字列中の変数が使われる位置に書くことができるのでひと目でわかりやすいです。

他にもstring.Formatでは
書式指定のコロンをセミコロンにしてしまったり、引数の数が足りない場合などはコンパイルエラーにならず、実行時に例外発生となりますが、
文字列補間であればセミコロンではコンパイルエラーになりますし、引数の数が足りないということもありません。

ぜひ文字列補間を使っていきましょう。

スポンサーリンク