web-dev-qa-db-ja.com

@(at)サインインファイルパス/文字列

可能性のある複製:
。NETの文字列の前にある@は?

私は次のコードを持っています:

new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value)

@サインは?

35
Sally

ファイルパスとは関係ありません。文字列のエスケープ動作を変更します。

@で始まる文字列リテラルでは、\で始まるエスケープシーケンスが無効になります。 \はパス区切り文字であり、エスケープシーケンスを開始したくないため、これはファイルパスに便利です。

通常の文字列では、\\\にエスケープする必要があるため、例はこの「pdf \\」のようになります。ただし、@というプレフィックスが付いているため、エスケープが必要な文字は"""としてエスケープされます)のみであり、\は単純に表示されます。

この機能は、ファイルパスや正規表現などの\を含む文字列リテラルに便利です。

簡単な例では、ゲインはそれほど大きくはありませんが、フルパス"C:\\ABC\\CDE\\DEF"を持っているイメージは、@"C:\ABC\CDE\DEF"の方がずっときれいに見えます。

正規表現の場合、ほぼ必須です。通常、正規表現には、すでに他の文字をエスケープしているいくつかの\が含まれており、それらをエスケープする必要がある場合は、ほとんど読み取り不能になります。

99
CodesInChaos

逐語的文字列リテラル です。

これにより、文字列にバックスラッシュと改行を含めることができます。

string multiLineString = @"First line
second line
third line";

バックスラッシュはエスケープに使用されないため、文字列に二重引用符を挿入するには二重引用符を使用する必要があります。

string withQuote = @"before""after";

逐語的な文字列リテラルは、通常、ファイルパス(示されているように)および正規表現に使用されます。どちらも頻繁にバックスラッシュを使用します。

詳細については、私の 文字列に関する記事 を参照してください。

29
Jon Skeet

エスケープせずにバックスラッシュ(\)を入力できます。

 var s1 = "C:\\Temp\\MyFileName";
 var s2 = @"C:\Temp\MyFileName";

どちらも同じ内容の文字列になります(また、文字列はコンパイル時に interned であるため、おそらく同じ文字列参照であっても)。

8
GvS