2010-09-30 150 views
7

存在一種字符串類型,用於禁用字面轉義字符的處理並按原樣打印字符串。這是什麼字符串?用於字符串前綴的符號,以及可能的用途?轉義字符

是\?

回答

15

這是@字符:@"c:\path"

它被稱爲一個verbatim string literal

+0

謝謝你們。我給每個人點數,但我必須選擇最好的答案,這是第一個答覆。再次感謝你的幫助。 – Yves 2010-09-30 16:09:56

+0

在這種情況下,@Kombucha,一定要將其標記爲接受的答案。 :) – 2010-09-30 16:15:15

+0

我做了:)我需要等8分鐘才能檢查複選標記。我只是做:) – Yves 2010-09-30 16:17:45

5

@

string sLiteral = @"This will be formatted. Even including 
return characters, 
    and spaces at the start of lines"; 
8

它被稱爲verbatim string literal,並使用@前綴

沒有前綴,它仍然是一個字符串。 - 它是一個常規字符串文字

(有些人誤以爲術語「字符串文字」只適用於逐字字符串,但比這更普遍)

逐字字符串是有用的:

  • 多行字符串
  • 字符串這自然包含反斜槓(例如作爲Windows路徑和正則表達式)

請注意,此只有在編譯時有所不同。換句話說,這兩個語句是完全等效

string x = "foo\\bar"; // Regular string literal 
string x = @"foo\bar"; // Verbatim string literal 

逐字字符串以同樣的方式作爲常規字符串文字還是實習,還是指的System.String

情況下,從第2.4節的C# 4.0 specification .4.5:

規則字符串由包含在雙引號零個或多個字符,如「你好」,並且可以包括簡單的轉義序列(例如作爲製表符的\ t),以及十六進制和Unicode轉義序列。

逐字字符串文字由@後跟雙引號字符,零個或多個字符和一個閉合的雙引號字符組成。一個簡單的例子是@「你好」。在逐字字符串文字中,分隔符之間的字符是逐字解釋的,唯一的例外是引號轉義序列。特別是,簡單的轉義序列,以及十六進制和Unicode轉義序列不會在逐字字符串文字中處理。逐字字符串文字可能跨越多行。

注意@也可以用來作爲前綴,以使您可以使用關鍵字作爲標識符:

int class = 10; // Invalid 
int @class = 10; // Valid 

這是很少有用,但有時需要,如果你使用特定標識符。 (該class關鍵字可以是用於在ASP.NET MVC匿名類型屬性是有用的,例如。)

2

如果我有一個字符串作爲這樣:C:\ monkey.txt

我將不得不逃脫斜槓是這樣的:
string s = "c:\\monkey.txt"

通知雙斜槓

或者你可以使用「@」符號,表示該字符串是從字面上理解:
string s = @"c:\monkey.txt"