2011-05-09 112 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"; 

我之所以有双斜杠是因为我逃避了斜杠所以它不被视为一个命令。如果我使用逐字字符串符号,我的代码可能如下所示:

这使得它更容易写,当你在处理特殊字符的字符串。