C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#で文字列の前に付ける「@」とは?逐語的文字列リテラルの意味と使い方

文字列の前に付いた @ は、その文字列が逐語的文字列リテラル(verbatim string literal)であることを示す記号です。

C#では、@ を使うことで特別な形式の文字列を作成できます。この @ は「逐語的識別子(verbatim identifier)」と呼ばれます。文字列の先頭に @ を付けると、コンパイラはその文字列を逐語的文字列として認識し、通常のエスケープ処理を行わずにコンパイルします。

この記号の最大のメリットは、文字列内のエスケープ文字(\n や \t など)や改行を無視して、書かれた通りに解釈させることです。特に Windows のファイルパスのようにバックスラッシュ(\)を多用する場合や、正規表現・JSON などの長い文字列を扱う際に、エスケープシーケンスの二重書き(\\)から解放され、コードが格段に読みやすくなります。

コード例

using System;
using System.IO;
namespace DemoApplication{
    class Program{
        static void Main(string[] args){
            // 通常の文字列:\n が改行として解釈される
            Console.WriteLine("test string\n test string");
            // 逐語的文字列:\n がそのまま文字として出力される
            Console.WriteLine(@"test string \n test string");
            // 以下の2つの記述は同じ結果になる
            string jsonString1 = File.ReadAllText(@"D:\Json.json");
            string jsonString2 = File.ReadAllText("D:\\Json.json");
            Console.ReadLine();
        }
    }
}

実行結果

上記のコードを実行すると、次のような出力が得られます。

test string
test string
test string \n test string

1行目は通常の文字列のため \n が改行として機能し、2行が出力されています。一方、3行目は逐語的文字列なので \n が改行として解釈されず、そのまま表示されていることが分かります。

補足:逐語的文字列の注意点

  • 逐語的文字列の中でダブルクォート(")を使用したい場合は、"" のように2つ重ねて記述します。
  • C# 11 以降では、さらに便利な「生文字列リテラル(raw string literal)」も利用できるようになりました。
  1. JavaのStringIndexOutOfBoundsExceptionとは?発生原因と対処法をわかりやすく解説

    StringIndexOutOfBoundsExceptionとはJavaにおいて、文字列(String)は一連の文字を格納するために使用され、オブジェクトとして扱われます。文字列は、java.langパッケージに含まれるStringクラスによって表現されます。文字列の作成方法は主に2つあります。1つは他のオブジェクトと同様にnewキーワードを使用する方法、もう1つはプリミティブ型のようにリテラルを直接代入する方法です。String stringObject = new String(Hello how are you); String stringLiteral = Welcome to T

  2. Windows 10のテストモードとは?入り方と解除方法を徹底解説

    Microsoft Store以外からアプリケーションをインストールするたびに、警告ポップアップが表示された経験はありませんか?これは、外部ソフトウェアがユーザーの知らないうちにシステムに被害を与えることを防ぐためのセキュリティ機能です。同様に、Microsoftは各種ドライバーやアプリケーションに悪意のあるコードが含まれていないかを検証し、安全であることを証明するデジタル署名を付与しています。検証されていないソフトウェアや認証証明書を持たないソフトウェアは、Windows OSによってブロックされる可能性が非常に高いのです。 こうしたセキュリティ対策はパソコンを安全に保つために重要ですが、開