2011-05-09 88 views
2

新學習者的快速問題, C#代碼中「@」的含義是什麼?C#中「@」的含義是什麼

例子:

ClientDataSource.Where = @"it.ClientID==1"; 
cont.Notes = @""; 
Response.Redirect(@"~/Default.aspx"); 

謝謝!

回答

11

這是一個verbatim string literal

MSDN describes it as such:爲了方便和更好的可讀性當字符串文本包含反斜槓字符,例如在文件路徑

使用逐字字符串。因爲逐字字符串將新行字符保留爲字符串文本的一部分,所以它們可用於初始化多行字符串。使用雙引號將引號嵌入逐字字符串中。

@也可以用於創建匹配保留字的標識符:2.4.2 Identifiers

例如:

var class = "Reading"; // compiler error 
var @class = "Math"; // works 
+1

更具體地說,一個逐字字符串文字。 – BoltClock 2011-05-09 02:20:15

+0

感謝您的相當有用的答案! – Oak 2011-05-09 02:23:03

+1

它也可以用來創建匹配保留字的標識符:http://msdn.microsoft.com/en-us/library/aa664670.aspx – 2011-05-09 02:23:54

4

@"...."表示verbatim string literal。除了""(允許在字符串中包含"字符)之外,C#不處理字符串中的任何轉義字符。

這樣可以更輕鬆,更清潔地處理字符串,否則這些字符串需要有一堆轉義才能正確處理。例如,文件/文件夾路徑。

string filePathRegular = "C:\\Windows\\foo\\bar.txt"; 
string filePathVerbatim = @"C:\Windows\foo\bar.txt"; 

它在編寫正則表達式以及可能還有很多其他的東西時也非常有用。

值得注意的是,C#還使用@字符作爲前綴以允許保留字用作標識符。例如,ASP.Net MVC中的Html Helpers可以爲其創建的標籤提供一個包含HTML屬性的匿名對象。所以,你可能會看到這樣的代碼:

<%= Html.LabelFor(m => m.Foo, new { @class = "some-css-class" }) %> 

@這裏需要因爲class否則保留字。

+1

如果您使用'@',您必須使用''''''''''來避免引號 – 2011-05-09 02:25:05

+0

C#也允許NEWLINE(和其他?)在非逐字字符串文字中無效 – 2011-05-09 02:25:47

+0

@Matthew - You當然是對的,謝謝你的回覆,我已經糾正了我的帖子。 – 2011-05-09 02:30:56

2

逐字字符串字面值允許您將文本放入字符串中,否則編譯器會對其進行不同處理。例如,如果我打算寫一個文件路徑,並將其分配給一個變量,我可能會做一些像這樣:

myString = "C:\\Temp\\Test.txt"; 

我之所以有雙斜槓是因爲我逃避了斜槓所以它不被視爲一個命令。如果我使用逐字字符串符號,我的代碼可能如下所示:

這使得它更容易寫,當你在處理特殊字符的字符串。