ごまなつ Blog

楽しく働ける世界を目指して

【C#】ヒアドキュメント(逐語的文字列リテラル:@””)の使い方

ヒアドキュメントとは、\や”などの特殊文字エスケープシーケンスを必要とせず、改行を含むことができる文字列の記述法です。C#においては、文字列でヒアドキュメントができますが、「逐語的文字列リテラル」「ヒアストリング」「@-quoted string」と呼ばれています。

ファイルパスでよく使われます。\がファイルパスに使われているからです。

記述法

文字列リテラルの前に@をつけるだけです。

通常の文字列では、\を表示するためにはエスケープシーケンスの\をつける必要があります。

string filepath = "C:\\hoge\\hogehoge"

先頭に@をつけると、この書き方で宣言できます。

string filepath = @"C:\hoge\hogehoge"

改行を含んだ文字列は

string mail = "○○様\n○○です\nお世話になっております。"

string mail = "○○様
               ○○です
               お世話になっております。"

と書けます。 改行に関しての注意点は、インデントのための空白も文字列に含まれてしまう点です。ですので、空白を取り除くメソッドを作ってそれに読ませるか、改行後の文字列を左詰めで書いてください。

改行を文字列に含むことができるのは、SQL文に役立ちます。SQL文を文字列で宣言するとき、

string sql="SELECT * FROM hogeTABLE";
sql+= "WHERE hoge =A AND hogehoge=B";
sql+="ORDER BY ASC;";

のように+=で文字列をつなげていたり、

string sql=new StringBuilder();
sql.Append("SELECT ");
sql.Append("          * ");
sql.Append( "FROM ");
sql.Append("          hogeTABLE");
sql.Append("WHERE ") ;
sql.Append("hoge =A AND hogehoge=B");
sql.Append("ORDER BY ASC;");

のようにAppendでつなげたりしますが、

string sql=@"SELECT * FROM hogeTABLE WHERE hoge =A AND hogehoge=B ORDER BY ASC;"

のように1行で書くことができます。

まとめ

文字列リテラルの前に@をつけると\や”などの特殊文字エスケープシーケンスを必要とせず、改行を含むことができる文字列になる。ファイルパスやSQL文で便利。