C# @(at)登录文件路径/字符串
可能重复:C# @(at)登录文件路径/字符串,c#,asp.net,string,path,escaping,C#,Asp.net,String,Path,Escaping,可能重复: 我有以下代码: new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value) @符号有什么作用?它与文件路径无关。它更改字符串的转义行为 在前缀为@的字符串文字中,以\开头的转义序列被禁用。这对于文件路径很方便,因为\是路径分隔符,您不希望它启动转义序列 在普通字符串中,您必须将\转义为\\,因此您的示例类似于“pdf\”。但是,由于它的前缀是@,唯一需要转义的字符是“(转义为”),并且\可以简
我有以下代码:
new Attachment(Request.PhysicalApplicationPath + @"pdf\" + pdfItem.Value)
@
符号有什么作用?它与文件路径无关。它更改字符串的转义行为
在前缀为@
的字符串文字中,以\
开头的转义序列被禁用。这对于文件路径很方便,因为\
是路径分隔符,您不希望它启动转义序列
在普通字符串中,您必须将\
转义为\\
,因此您的示例类似于“pdf\”。但是,由于它的前缀是@
,唯一需要转义的字符是“
(转义为”
),并且\
可以简单地出现
此功能对于包含\
的字符串文本(如文件路径或正则表达式)非常方便
对于您的简单示例,增益并没有那么大,但是图像中的完整路径“C:\\ABC\\CDE\\DEF”
然后@“C:\ABC\CDE\DEF”
看起来好多了
对于正则表达式来说,这几乎是必须的。正则表达式通常包含几个已转义的其他字符,如果需要转义它们,通常会变得几乎不可读。它允许您输入反斜杠(\),而无需转义:
var s1 = "C:\\Temp\\MyFileName";
var s2 = @"C:\Temp\MyFileName";
这两种方法都会产生一个内容相同的字符串(而且由于字符串在编译时,甚至可能是相同的字符串引用)。这是一个错误
这允许字符串包含反斜杠甚至换行符,而不会对其进行不同的处理:
string multiLineString = @"First line
second line
third line";
由于反斜杠不用于转义,因此在字符串中插入双引号需要将其加倍:
string withQuote = @"before""after";
逐字字符串文本通常用于文件路径(如您所示)和正则表达式,这两种表达式都经常使用反斜杠
有关详细信息,请参阅my。@Sally在删除
@
后尝试运行代码,并查看差异!或者,Path
类也可以方便地用于文件系统路径。