ホームに戻る
出典 :
$ - 文字列補間 - C# リファレンス | Microsoft Docs 複合書式指定 | Microsoft Docs
目次 :

C#における文字列リテラルの表現

C/C++同様に二重引用符で括ることで文字列を記述できる。
また、二重引用符の前に@を付与することで、エスケープシーケンスが無効化される
⇒ 入力した内容がそのまま反映されるため、"\" (Yen記号、バックスラッシュ)を含む文字列をそのまま既述できる。
表現したい文字列 無印
(通常の文字列表現)
@付与
(エスケープシーケンス無効化)
基本形 Sample "Sample" @"Sample"
二重引用符 " "\"" @""""
バックスラッシュ \ "\\" @"\"
エスケープ文字 (\r : 復帰改行) "\r" (表現不可)
改行を含む文字列 Top
Middle
Bottom
"Top\nMiddle\nBottom" @"Top
Middle
Bottom"

複合文字列と文字列補間

文字列中に変数の値やリテラルを埋め込むことができる。
(文字列補間はC#6.0以降で使用可能)
ブレース自身は {{ または }}
概要 記述例
複合文字列 値を埋め込む位置に
{[挿入子の指定順]} (0 起算)
を記述、挿入子をカンマに続けて記述する。
コード
string name = "Mark"; var date = DateTime.Now; Console.WriteLine("Hello, {0}! Today is {1}, it's {2:HH:mm} now.", name, date.DayOfWeek, date); // ↑ ↑ ↑ │ │ │ // └──────│────│───────┘ │ │ // └────│──────────┘ │ // └──────────────────┘
出力結果
Hello, Mark! Today is Wednesday, it's 19:40 now.
文字列補間
(C# 6.0以降)
文字列の先頭(二重引用符の前)に$を付与し、
値を埋め込む位置に
{[挿入子]}
をそのまま記述する。
複合文字列を用いるよりも直観的な記述が可能。
コード
string name = "Mark"; var date = DateTime.Now; Console.WriteLine($"Hello, {name}! Today is {date.DayOfWeek}, it's {date:HH:mm} now.");
出力結果
Hello, Mark! Today is Wednesday, it's 19:40 now.

@との併用

(文字列補間)$@"文字列"の形式で記述。
(C#8.0以降は、@$でも可。)
string str01 = $@"Mark {"Down"}"; //< 文字列にリテラルを埋め込む ⇒ Mark Down int i = 100; string str02 = $@"{i} %"; //< 文字列に変数値を埋め込む ⇒ 100 %

アラインメントの指定

挿入する値に続き、値を記述することで出力文字数とアラインメントを指定できる。
詳細はリンク先を参照。
string str01 = $"|{"Mark", -7}|"; //< 7文字・左詰め ⇒ |Mark | string str02 = $"|{"Mark", 7}|"; //< 7文字・右詰め ⇒ | Mark|

書式指定文字列

値(またはアラインメント指定)に続き、 :[書式指定文字列] の形式で、出力形式を指定できる。
書式指定文字列は二重引用符で囲んではならない
var date = DateTime.Now; //< 現在日時を取得 string str01 = $"It's {date, -7, :HH:MM} now."; //< 7文字・左詰め / HH:MM形式 ⇒ It's 17:35 now.
コロンはそのままでは書式指定文字列の始点とみなされるため、コロンが特別な意味を持つ場合(三項演算子)は、条件式自体を丸括弧で囲む。
int age = 34; string str01 = $"Johnny is {age} year{(age == 1 ? "" : "s")} old."; //< 補完式中で(三項)条件演算子を用いる場合 ⇒ Johnny is 34 years old. age = 1; string str02 = $"May is {age} year{(age == 1 ? "" : "s")} old."; //< 同上 ⇒ May is 1 year old.