Answers:
它将字符串标记为逐字字符串文字 -字符串中通常被解释为转义序列的任何内容都将被忽略。
所以"C:\\Users\\Rich"
和@"C:\Users\Rich"
有一个例外:双引号需要一个转义序列。要转义双引号,您需要连续放置两个双引号。例如,@""""
计算为"
。
{{
如果您想在string.Format
通话中使用常规花括号,则还必须将花括号加倍。
这是逐字字符串文字。这意味着不应用转义。例如:
string verbatim = @"foo\bar";
string regular = "foo\\bar";
在这里verbatim
和regular
具有相同的内容。
它还允许多行内容-对于SQL来说非常方便:
string select = @"
SELECT Foo
FROM Bar
WHERE Name='Baz'";
对于逐字字符串文字而言,转义所需要的一点是获得双引号(“),方法是将其加倍:
string verbatim = @"He said, ""Would you like some coffee?"" and left.";
string regular = "He said, \"Would you like some coffee?\" and left.";
“ @”也具有另一种含义:将其放在变量声明的前面,使您可以将保留的关键字用作变量名。
例如:
string @class = "something";
int @object = 1;
我只发现一两个合法用途。当您想执行以下操作时,主要在ASP.NET MVC中:
<%= Html.ActionLink("Text", "Action", "Controller", null, new { @class = "some_css_class" })%>
这将产生一个HTML链接,例如:
<a href="/Controller/Action" class="some_css_class">Text</a>
否则,您将不得不使用“类”,它不是保留关键字,但大写的“ C”不遵循HTML标准,并且看起来不正确。
由于您也明确要求使用VB,因此让我补充一下,此逐字字符串语法在VB中不存在,仅在C#中不存在。而是,所有字符串在VB中都是逐字记录的(除了它们不能包含换行符的事实,不同于C#逐字字符串):
Dim path = "C:\My\Path"
Dim message = "She said, ""Hello, beautiful world."""
转义序列在VB中不存在(除了引号字符加倍,例如C#逐字字符串)外,这使某些事情变得更加复杂。例如,要在VB中编写以下代码,您需要使用串联(或其他任何构造字符串的方式)
string x = "Foo\nbar";
在VB中,其编写方式如下:
Dim x = "Foo" & Environment.NewLine & "bar"
(&
是VB字符串连接运算符。+
同样可以使用。)
"
和之间插入所有特殊字符"
。
String.Format
,因此可以执行此操作。实际上,我现在永远不会写"x" & Environment.NewLine
,而总是使用String.Format("x{0}", Environment.Newline)
etc。不过,这里的C#更方便。
"x" & nl & nl
或"x" + nl + nl
或"x" . $nl . $nl
每天结束"x\n\n"
。也"x" + bs + bs
结束了"x\\\\"
。而"x" + q + q
在"x\"\""
/ "x"""""
。现在String.Format
,这是与我们上面进行的比较无关的另一个问题。
http://msdn.microsoft.com/zh-CN/library/aa691090.aspx
C#支持两种形式的字符串文字:常规字符串文字和逐字字符串文字。
常规字符串文字由零个或多个用双引号引起来的字符组成,例如“ hello”,并且可以包括简单的转义序列(例如,制表符\ t)以及十六进制和Unicode转义序列。
逐字字符串文字由@字符,后跟双引号字符,零个或多个字符和结束双引号字符组成。一个简单的例子是@“ hello”。在逐字字符串文字中,定界符之间的字符逐字解释,唯一的例外是引号-转义序列。特别是,简单的转义序列以及十六进制和Unicode转义序列不在逐字字符串文字中处理。逐字字符串文字可以跨越多行。
从MSDN复制:
在编译时,将逐字字符串转换为具有所有相同转义序列的普通字符串。因此,如果在调试器监视窗口中查看逐字字符串,则将看到编译器添加的转义字符,而不是源代码中的逐字版本。例如,逐字字符串
@"C:\files.txt"
将在监视窗口中显示为"C:\\files.txt"
。