新学员的快速提问, C#代码中“@”的含义是什么?
示例:
ClientDataSource.Where = @"it.ClientID==1";
cont.Notes = @"";
Response.Redirect(@"~/Default.aspx");
谢谢!
答案 0 :(得分:13)
当字符串文本包含反斜杠字符时,例如在文件路径中,使用逐字字符串是为了方便和更好的可读性。因为逐字字符串将新行字符保留为字符串文本的一部分,所以它们可用于初始化多行字符串。使用双引号在逐字字符串中嵌入引号。
@
也可用于创建与保留字匹配的标识符: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";
在处理特殊字符时,可以更轻松地编写字符串。