C#中“@”的含义是什么

时间:2011-05-09 02:18:45

标签: c#

新学员的快速提问, C#代码中“@”的含义是什么?

示例:

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

谢谢!

3 个答案:

答案 0 :(得分:13)

这是verbatim string literal

MSDN describes it as such

  

当字符串文本包含反斜杠字符时,例如在文件路径中,使用逐字字符串是为了方便和更好的可读性。因为逐字字符串将新行字符保留为字符串文本的一部分,所以它们可用于初始化多行字符串。使用双引号在逐字字符串中嵌入引号。

@也可用于创建与保留字匹配的标识符:2.4.2 Identifiers

例如:

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

答案 1 :(得分:5)

@"...."表示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是保留字。

答案 2 :(得分:2)

逐字字符串文字允许您将文本放在字符串中,否则编译器将以不同方式对待该字符串。例如,如果我要编写文件路径并将其分配给变量,我可能会这样做:

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

我必须有双斜杠的原因是因为我正在逃避斜线,所以它不被视为命令。如果我使用逐字字符串文字符号,我的代码可能如下所示:

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

在处理特殊字符时,可以更轻松地编写字符串。