@(at)登录文件路径/字符串

Sal*_*lly 35 c# asp.net string escaping path

可能重复:
.NET前面的字符串前面的@是什么?

我有以下代码:

new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value)
Run Code Online (Sandbox Code Playgroud)

什么是@标志吗?

Cod*_*aos 99

它与filepath无关.它改变了字符串的转义行为.

在以字符串@开头的转义序列为前缀的字符串文字中\被禁用.这对于文件路径很方便,因为\它是路径分隔符,您不希望它启动转义序列.

在一个正常的字符串,你将不得不逃避\\\让你的例子看起来像这样的"PDF \\".但是因为它的前缀@是唯一需要转义的字符"(它被转义为"")并且\可以简单地出现.

此功能对于包含\诸如文件路径或正则表达式的字符串文字很方便.

为了您简单的例子增益不那么大,但是像你有一个完整的路径"C:\\ABC\\CDE\\DEF",然后@"C:\ABC\CDE\DEF"看起来要好很多.

对于正则表达式,它几乎是必须的.正则表达式通常包含几个已\转义的其他字符,如果您需要转义它们,通常几乎不可读.

  • 或者,`Path`类也方便文件系统路径. (3认同)

Jon*_*eet 29

这是一个逐字字符串文字.

这允许字符串包含反斜杠甚至换行符,而不会以不同方式处理它们:

string multiLineString = @"First line
second line
third line";
Run Code Online (Sandbox Code Playgroud)

由于反斜杠不用于转义,因此在字符串中插入双引号需要将其加倍:

string withQuote = @"before""after";
Run Code Online (Sandbox Code Playgroud)

逐字字符串文字通常用于文件路径(如您所示)和正则表达式,两者都经常使用反斜杠.

有关更多信息,请参阅我的文章.


GvS*_*GvS 8

它允许您输入反斜杠(\)而不转义它:

 var s1 = "C:\\Temp\\MyFileName";
 var s2 = @"C:\Temp\MyFileName";
Run Code Online (Sandbox Code Playgroud)

两者都会产生一个具有相同内容的字符串(因为字符串在编译时被中断,甚至可能是相同的字符串引用).