C#の逐語的文字列リテラル

C#の逐語的文字列リテラル

逐語的文字列リテラルとは?

逐語的文字列リテラル(Verbatim String Literal)とは、C#において特殊な記号 @ を用いることで、エスケープシーケンスを無視し、記述したままの文字列を扱う方法です。

基本的な使い方

通常の文字列リテラルと逐語的文字列リテラルの違いを比較してみましょう。


    string normalString = "C:\\Users\\Public";  // エスケープが必要
    string verbatimString = @"C:\Users\Public";  // そのまま記述可能
    Console.WriteLine(normalString);
    Console.WriteLine(verbatimString);
    

逐語的文字列リテラルでは、バックスラッシュ(\)をエスケープせずに記述できます。

エスケープシーケンスの扱い

通常の文字列では、例えば改行は \n と記述する必要がありますが、逐語的文字列リテラルではそのまま書くと \n のまま出力されます。


    string normal = "これは\n改行を含む文字列です";
    string verbatim = @"これは\n改行を含む文字列です";
    Console.WriteLine(normal);
    Console.WriteLine(verbatim);
    

出力結果:

    これは
    改行を含む文字列です
    これは\n改行を含む文字列です
    

複数行文字列の利用

逐語的文字列リテラルを使用すると、そのまま改行を含めることができます。


    string multiLine = @"これは
    複数行の
    文字列です。";
    Console.WriteLine(multiLine);
    

ファイルパスの表記

Windowsのファイルパスを扱う場合、通常の文字列ではバックスラッシュを2回記述する必要がありますが、逐語的文字列では不要です。


    string path = @"C:\Program Files\MyApp";
    Console.WriteLine(path);
    

ダブルクォートの扱い

逐語的文字列内でダブルクォート(”)を使う場合は、2回連続して記述します。


    string quote = @"彼は ""こんにちは"" と言った。";
    Console.WriteLine(quote);
    

出力結果:

    彼は "こんにちは" と言った。
    

逐語的補間文字列

C# 6.0 以降では、補間文字列($)と逐語的文字列(@)を組み合わせることができます。


    string name = "Alice";
    string greeting = $@"こんにちは、{name}さん!";
    Console.WriteLine(greeting);
    

まとめ

  • 逐語的文字列リテラルは、エスケープシーケンスを無視する。
  • WindowsのファイルパスやSQLクエリなどの記述に便利。
  • ダブルクォートは “” のように2回繰り返す必要がある。
  • $@ を併用することで補間文字列としても利用可能。
コメントは受け付けていません。