2011-03-03 61 views

回答

86

它與filepath無關。它改變了字符串的轉義行爲。

在以@開頭的字符串文字中,以\開頭的轉義序列被禁用。這對於文件路徑很方便,因爲\是路徑分隔符,您不希望它啓動轉義序列。

在一個正常的字符串,你將不得不逃離\\\所以你的例子看起來像這樣的「PDF \\」。但由於它的前綴爲@,因此唯一需要轉義的字符是"(轉義爲""),並且\可以簡單地出現。

此功能對包含\的字符串文字很方便,如文件路徑或正則表達式。

爲您簡單的例子增益不那麼大,但是像你有一個完整的路徑"C:\\ABC\\CDE\\DEF"然後@"C:\ABC\CDE\DEF"看起來要好很多。

對於正則表達式來說,它幾乎是必須的。正則表達式通常包含幾個已經逃脫其他角色的\,如果你需要逃避它們,通常會變得幾乎不可讀。

+0

那麼它是如何改變它的? – Sally 2011-03-03 10:23:08

+1

@Sally在刪除'@'之後嘗試運行您的代碼並查看其差異! – Mayank 2011-03-03 10:24:12

+3

或者,'Path'類也適用於文件系統路徑。 – 2011-03-03 10:24:29

6

它可以讓你沒有逃脫它進入反斜線(\):在具有相同內容的字符串

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

兩個結果(和因爲字符串是interned在編譯時,甚至可能相同字符串引用)。

26

這是一個verbatim string literal

這允許包含反斜槓,甚至換行沒有他們的字符串被不同的處理:

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

由於反斜槓不用於逃避,插入一個雙引號串入要求它增加一倍:

string withQuote = @"before""after"; 

逐字字符串通常用於文件路徑(如你所示)和正則表達式,這兩個經常使用的反斜槓。

查看我的article on strings瞭解更多信息。