文字列の開始のダブルクオーテーション「"」の前に「@」が記述されている - Verbatim 文字列リテラルの利用 - C#

C#のコード内で文字列の開始のダブルクオーテーションの手前に @ 記号が記述されている文字列についての紹介です。

概要

C#のコードで、文字列の開始のダブルクオーテーション(")の記号の手前に 「@」が記述されている文字列があります。
この文字列は、「Verbatim 文字列リテラル(逐語的文字列リテラル)」と呼ばれる文字列です。
この記事では、逐語的文字列リテラルを紹介します。
記述例
string path = @"c:\Program Files\iPentec\TestApp\Test1.exe"

書式

書式は次の通りです。
@"(文字列)"

プログラム例

UI

下図のフォームを作成します。

コード

以下のコードを記述します。
namespace VerbatimString
{
  public partial class Form1 : Form
  {
    public Form1()
    {
      InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
      string str1 = "c:\\Program Files\\iPentec\\TestApp\\test.exe\r\nApp:URL";
      string str2 = @"c:\Program Files\iPentec\TestApp\test.exe\r\nApp:URL";

      textBox1.Text += str1;
      textBox1.Text += "-----\r\n";
      textBox1.Text += str2;
    }

    private void button2_Click(object sender, EventArgs e)
    {
      //string str3 = "Penguin Cookie
      //  Camel Caramel";
      string str4 = @"Penguin Cookie
        Camel Caramel";

      //textBox1.Text += str3;
      textBox1.Text += str4;
    }
  }
}

解説

button1では、通常の文字列とVerbatim 文字列リテラルで表示がどのように異なるかの比較です。
button2では、Verbatim 文字列リテラルの改行の表現の動作を確認します。

実行結果

プロジェクトを実行します。下図のウィンドウが表示されます。


[button1]をクリックします。テキストボックスに結果が表示され、下図の状態になります。
Verbatim 文字列リテラルの"\"は "\"文字として表示されています。一方で "\r\n" は改行にならず、そのまま "\r\n"の文字として表示されています。


[button2]をクリックします。テキストボックスに結果が表示され、下図の状態になります。
コード中の改行が文字列の改行として表現されており、インデントも空白文字列として表現されています。

通常の文字列との比較例

エスケープシーケンス文字

下記コードを記述し、ビルドすると、str1の行で以下のエラーが発生します。
エラーメッセージ
CS1009:認識できないエスケープ シーケンスです
    private void button1_Click(object sender, EventArgs e)
    {
      string str1 = "c:\Program Files\iPentec\TestApp\test.exe\r\nApp:URL";
      string str2 = @"c:\Program Files\iPentec\TestApp\test.exe\r\nApp:URL";

      textBox1.Text += str1;
      textBox1.Text += str2;
    }


通常の文字列では \ 記号はエスケープ シーケンスとなるため、\記号は \r\n といったエスケープシーケンスの文字を記述する必要があります。
通常の文字列で "\" を表現する場合は "\\" と記述します。上記のコードをエラーが発生しないようビルドするには以下のコードに変更します。
    private void button1_Click(object sender, EventArgs e)
    {
      string str1 = "c:\\Program Files\\iPentec\\TestApp\test.exe\r\nApp:URL";
      string str2 = @"c:\Program Files\iPentec\TestApp\test.exe\r\nApp:URL";

      textBox1.Text += str1;
      textBox1.Text += str2;
    }

改行による表現

また、Verbatim 文字列リテラルは改行による複数行の記述ができますが、通常の文字列ではできません。
    private void button2_Click(object sender, EventArgs e)
    {
      string str3 = "Penguin Cookie
        Camel Caramel"; //ビルドエラー
      string str4 = @"Penguin Cookie
        Camel Caramel";

      textBox1.Text += str3;
      textBox1.Text += str4;
    }

著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用
最終更新日: 2022-11-28
作成日: 2022-11-28
iPentec all rights reserverd.