web-dev-qa-db-ja.com

C#の文字列リテラルで@プレフィックスは何をしますか

Path.Combine(part1、part2)を使用してパスを結合するC#の記事を読みました。

以下を使用します。

string part1 = @"c:\temp";
string part2 = @"Assembly.txt";

Part1およびpart2で@がどのように使用されているかを知っていますか?

46
Vaibhav Jain

@はどのメソッドとも関連していません。

これは、記号に続く文字列内の特殊文字をエスケープする必要がないことを意味します。

@"c:\temp"

等しい

"c:\\temp"

このような文字列は「逐語的」または@引用符で囲まれています。 [〜#〜] msdn [〜#〜] を参照してください。

59
abatishchev

C#Language Specification 4. に記載されているとおり:

2.4.4.5文字列リテラル

C#は、2つの形式の文字列リテラルをサポートしています。通常の文字列リテラルと逐語的な文字列リテラルです。通常の文字列リテラルは、「hello」のように二重引用符で囲まれたゼロ個以上の文字で構成され、単純なエスケープシーケンス(タブ文字の\ tなど)と16進およびUnicodeエスケープシーケンスの両方を含むことができます。逐語的文字列リテラルは、@文字とそれに続く二重引用符文字、ゼロ個以上の文字、および閉じ二重引用符文字で構成されます。簡単な例は@ "hello"です。逐語的な文字列リテラルでは、区切り文字間の文字は逐語的に解釈され、唯一の例外はquote-escape-sequenceです。特に、単純なエスケープシーケンス、および16進およびUnicodeエスケープシーケンスは、逐語的な文字列リテラルでは処理されません。

14
Alireza Maddah

これは逐語的な文字列リテラルを示し、通常は特別な意味を持つ特定の文字、たとえば\(通常はエスケープ文字)と改行。このため、Windowsパスを扱う場合に非常に便利です。

使わずに @、例の最初の行は次のようになります。

string part1 = "c:\\temp";

詳細情報 こちら

4
Will Vousden

@を使用すると、特殊文字をエスケープする必要はありません。

したがって、@なしで「c:\\ temp」を記述する必要があります。

より正確な場合、「逐語的」文字列と呼ばれます。あなたはそれについてここで読むことができます:
http://msdn.Microsoft.com/en-us/library/aa691090(v = vs.71).aspx

1
MajesticRa

@は、文字をエスケープする必要がないように文字列を指定する別の方法を示しています。唯一の注意点は、単一の「」を表すには二重引用符が「」である必要があるということです。

1
Kevin Hsu