LoginSignup
190
171

More than 5 years have passed since last update.

【C#】string.Format() をやめて $"{}"(文字列補間式)を使う

Last updated at Posted at 2018-04-01
1 / 2

文字列補間式 $ について学習したので自分用メモとしてまとめました。
何か間違っていたら教えていただけると嬉しいです。

読みやすい

string.Format を使って書くと...

string name = "Sanonosa";
int hour = DateTime.Now.Hour;
string message = string.Format("こんにちは、{0}さん。今は{1}時です。", name, hour);

string.Format と書くのが長いし、第二引数以降がどの {n} と対応しているかわかりにくいです...。

文字列補間式 $ を使って書くと

文字列の先頭に $ をつけるだけオーケー。
字列の中に直接埋め込むことができます。

string name = "Sanonosa";
int hour = DateTime.Now.Hour;
Console.WriteLine($"こんにちは、{name}さん。 今は{hour}時です。");

実行時エラーをコンパイルエラーとして検出できる

以下のコードは実行時にエラーが発生しますが、コンパイルが通ってしまいます。
実行されないとエラーにならないため見落とす危険性があります。

埋め込む文字列が足りない
string.Format("こんにちは、{0}さん。今は{1}時です。", name);

埋め込む文字列が増えてくるとやってしまいがちです。
$ なら不注意な僕でもまず間違えようがないです。

以下のコードは書式文字列を設定する際、誤って : (コロン)ではなく ; (セミコロン)が使われていますが、これも実行されて初めて例外が発生します。

書式文字列の設定が間違っている
var text = string.Format("この本は{1000;c}です");

$ を使っておけばコーディング中にIDEがエラーを教えてくれますし、気づかなくてもコンパイルが通らないので安心です。

静的解析やコンパイルでエラーになる
var text = $"この本は{1000;c}です";    // エラー

書式設定できる

すでに書きましたが、 string.Format と同様に書式設定ができます。

var now = DateTime.Now;
Console.WriteLine($"{now:yyyyMMdd}");  // "2018年04月01日"

var today = DateTime.Today;
Console.WriteLine($"{today.Year}{today.Month,2}{today.Day,2}");   // "2018年 4月 1日"

var num1 = 1234567890;
Console.WriteLine($"{num1:#,0}");   // "1,234,567,890"

var num2 = 123;
Console.WriteLine($"{num2:00000}");  // "00123"

エスケープ

{ 自体を出力したい場合 {{と書きます。

var framework = "Angular";
Console.WriteLine($"{framework}のデータバインドは{{{{}}}}と書きます");
    // "Angularのデータバインドは{{}}と書きます"

読んでいただきありがとうございました。
$ は読みやすいしエラーも減るということで積極的に使っていこうと思います。

190
171
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
190
171