关于C#:@(at)登录文件路径/字符串

@(at) sign in file path/string

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
What's the @ in front of a string for .NET?

我有以下代码:

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

@符号有什么作用?


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

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

在正常的字符串中,您必须将\转义到\\中,因此您的示例看起来像这个"pdf"。但是,由于它的前缀是@,所以唯一需要转义的字符是"(作为""转义),\可以简单地出现。

此功能对于包含\的字符串文本(如文件路径或regex)很方便。

举个简单的例子来说,增益并不大,但是图像中你有一个完整的路径,"C:\\ABC\\CDE\\DEF",那么@"C:\ABC\CDE\DEF"看起来好多了。

对于正则表达式,这几乎是必须的。一个regex通常包含几个已经转义其他字符的\,如果需要转义这些字符,通常会变得几乎不可读。


它是一个逐字字符串。

这允许字符串包含反斜杠,甚至换行符,而不需要对它们进行不同的处理:

1
2
3
string multiLineString = @"First line
second line
third line"
;

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

1
string withQuote = @"before""after";

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

有关更多信息,请参阅我关于字符串的文章。


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

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

这两种方法都会产生具有相同内容的字符串(而且由于字符串在编译时被内部保存,所以可能甚至是相同的字符串引用)。