文字列の開始のダブルクオーテーション「"」の前に「@」が記述されている - 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