セージ の メモ書き

メモこそ命の恩人だ

C# - エスケープシーケンス/@逐語的リテラル文字/$文字列補間

エスケープシーケンス

docs.microsoft.com

  • "\" と文字の組み合わせ。
  • エスケープ文字とも呼ぶ。
  • 特殊な意味を表現する。

(抜粋)

エスケープシーケンス 意味
\t 水平タブ
\n 改行
\' 単一引用符
\" 二重引用符
\ \記号
\u Unicodeエスケープシーケンス (UTF-16 ビッグエンディアン)
Debug.WriteLine("111\t222");
// 111   222

Debug.WriteLine("111\n222");
// 111
// 222

Debug.WriteLine("111\'222\"333\\");
// 111'222"333\

Debug.WriteLine("\u3042 \u3044 \u3046");
// あ い う
// 文字コード表 http://ash.jp/code/unitbl21.htm

// 「\」が特別な意味を持つことを確認。


@ 逐語的リテラル文字

docs.microsoft.com

  • "@" を先頭に付与した文字。
  • 逐語的リテラル文字の場合、エスケープ処理が行われない。
    • "\" が特殊な意味を持たない。ただの文字列。
  • 活用例
  • メリット
    • 直感的に記述できる。
    • 可読性が良い。
Debug.WriteLine("C:\\test");
// C:\test

Debug.WriteLine(@"C:\test");
// C:\test
// @なしと同じ結果になった。エスケープ処理されていないことを確認。

Debug.WriteLine(@"C:\\test");
// C:\\test
// エスケープ処理されていないため、予想通り \\ と出力されたことを確認。
Debug.WriteLine(@"111\t222");
// 111\t222

Debug.WriteLine(@"111\n222");
// 111\n222

Debug.WriteLine(@"\u3042 \u3044 \u3046");
// \u3042 \u3044 \u3046

// @ でエスケープ処理が解除されることを確認。

「"」のエスケープ処理

  • 「""」で表現する。
  • 「"」の場合、\ のエスケープ処理がないため、文字列を識別できない。
Debug.WriteLine(@"111""222");
// 111"222

//Debug.WriteLine(@"111\"222");
// ビルドエラーになる。文字列の開始終了を識別できないので。


$ 文字列補間

docs.microsoft.com

  • 括弧 { } の中にある式を実行時に評価し、文字列を生成できる。
  • string.Format と比較し、以下のメリットがある。
    • 視覚的にわかりやすい。
    • 書式でエラーにならない。
  • string.Format と同様に、書式設定ができる。
// string.Format の場合
var data1 = 1;
var data2 = "ABC";

Debug.WriteLine(string.Format("ID:{0}、{1}さん", data1, data2));
// ID:1、ABCさん

// Debug.WriteLine(string.Format("ID:{0}、{1}さん {2}", data1, data2));
// 例外が発生する。
// System.FormatException: 'Index (zero based) must be greater than or equal to zero and less than the size of the argument list.'
// $ 文字列補間 の場合
var data1 = 1;
var data2 = "ABC";

Debug.WriteLine($"ID:{data1}、{data2}さん");
// ID:1、ABCさん

Debug.WriteLine($"ID:{data1:000}、{data2}さん");
// ID:001、ABCさん

// $ で文字列に式を埋め込めることを確認。

「{ }」のエスケープ処理

  • 文字列補間の場合、括弧 { } に意味がある。
  • 文字列として識別する場合、二重で表現する。
  • 「{{」や「}}」でOK。
Debug.WriteLine($"ID:{{data1}}、{{data2}}さん");
// ID:{data1}、{data2}さん


$ と @ の併用

  • $@ を先頭に指定するだけ。
  • それぞれの機能を使用できる。
var data1 = 1;
var data2 = "ABC";

Debug.WriteLine($@"C:\{data1:000}\{data2}");
// C:\001\ABC



以上