Engineer Blog開発者ブログ

2020.5.15

[C#]逐語的文字列…?

ソースコードを見ている時に何これ?というものがありました。
 

string test = @"あい\nうえ"

 

この「 @ 」がついた文字列はなに…?

こちらはC#で使用することが出来る、逐語的文字列というものらしいです。
逐語とは、「解釈・翻訳などで、原文の一語一語に忠実に合わせて行くこと。」ということ。
つまり文字列の最初に@を使用することで、文字列の原文をそのまま忠実に使用することができる。
特殊文字を通常の文字として解釈するようになります。

「あい\nうえ」の「\n」は、改行コードではなく「\n」という文字だと解釈されます。

また、以下のように改行した文字列は、改行を含む文字列だと認識されます。

 

string test  = @"あい
うえ"

 

ただし、ダブルクォーテーションを文字列として扱うには「""あいうえお""」と連続で記述する必要があります。

 

例1

string path = "E:\ユーザー\AppData\Local";
Console.WriteLine(path);

 上記だとビルドエラーになるので以下のように記述

string path = @"E:\ユーザー\AppData\Local";
Console.WriteLine(path);

E:\ユーザー\AppData\Local

 

例2

上記のコードを逐語的文字列を使ってコンソールに表示してみる。

string code = "string path = @\"E:\\ユーザー\\AppData\\Local\";\nConsole.WriteLine(path); ";
Console.WriteLine(code);

string path = @"E:\ユーザー\AppData\Local";
Console.WriteLine(path);

 

上記は逐語的文字列を使わずエスケープシーケンスを使用。以下は逐語的文字列を使用して表示させる。
 

string code = @"string path = @""E:\ユーザー\AppData\Local""
Console.WriteLine(path); ";
Console.WriteLine(code);

string path = @"E:\ユーザー\AppData\Local";
Console.WriteLine(path);

 

ダブルクォーテーションに気をつければシンプルに記述できていいですね。ただ、改行も含めるとコードの見栄えが悪くなってしまうのが気になります。

特殊文字を文字列にしたい時や、エスケープシーケンスを使いたくない場合に便利そうです。

Contact
お問い合わせ

電話番号0120 - 889 - 236
受付時間:平日 9:00-18:00