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

本文关键字:是什么 | 更新日期: 2023-09-27 17:55:20

新学习者的快速问题,C# 代码中"@"的含义是什么?

例子:

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

谢谢!

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

这是一个逐字字符串文字。

MSDN 这样描述它:

当字符串文本包含反斜杠字符(例如在文件路径中)时,请使用逐字字符串以方便和提高可读性。由于逐字字符串将换行符保留为字符串文本的一部分,因此它们可用于初始化多行字符串。使用双引号在逐字字符串中嵌入引号。

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

例如:

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

逐字字符串文字。 C# 不处理字符串中的任何转义字符,但 "" 字符除外(以允许在字符串中包含"字符)。

这使得处理字符串变得更加容易和干净,否则需要一堆转义才能正确处理。 例如,文件/文件夹路径。

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

它在编写正则表达式以及许多其他事情时也非常有用。

值得注意的是,C# 还使用 @ 字符作为前缀,以允许将保留字用作标识符。 例如,ASP.Net MVC 中的 HTML 帮助程序可以采用一个匿名对象,其中包含它们创建的标记的 HTML 属性。 因此,您可能会看到如下代码:

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

此处需要@,因为class否则是保留字。

逐字字符串文本允许您将文本放在字符串中,否则编译器会以不同的方式处理这些文本。 例如,如果我要编写文件路径并将其分配给变量,我可能会执行以下操作:

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

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

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

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