C#字符串前面的'@'符号

147

可能是重复问题:
.NET中字符串前面的 @ 是什么意思?

我在一本C#学习书籍中发现了这个问题。

DirectoryInfo dir = new DirectoryInfo(key.Key.ToString() + @":\");
然而,这本书没有解释'@'符号的用途。我尝试搜索MSDN C#运算符,但在该网页上找不到它。我可以猜测它允许开发人员不必转义'\',或者它允许没有任何转义序列吗?
这是什么,为什么我要使用@":\"而不是":\\"
感谢帮助。
编辑:请参见下面的评论以获取类似的问题。

1
我能指出关闭重复问题并列出那些有同感的人的名字,但不提供重复帖子的链接是多么的适得其反吗?这样做对于防止谷歌将人们引导到您不允许回答的页面没有任何作用,并且也没有提供链接... - Dan
1
@Dan 可能重复的链接在顶部的“可能重复”下方,在右侧的“已链接”下方。 - Daniel
5个回答

234

这意味着按照字面意思解释字符串(也就是说,如果您使用@前缀,则不能转义字符串中的任何字符)。在可以使用的情况下,它可以提高可读性。

例如,如果您正在使用UNC路径,则:

@"\\servername\share\folder"
比起这个,

更好看:

"\\\\servername\\share\\folder"

19
你可以通过将它们加倍来避免双引号,例如 string S = @""""; Console.Write("[{0}]", S); 将输出 [""] - Binary Worrier
@Mark 所以字符串中的任何转义序列都将被忽略并视为字面文本? - Daniel
2
@Daniel:正确;任何本应被反斜杠转义的序列都将被视为字面量。http://msdn.microsoft.com/en-us/library/362314fe(v=VS.100).aspx 进一步解释并给出了示例。 - Mark Avenius
@Mark 那个链接正是我所需要的 - 谢谢 - Daniel
1
+1,我从来没有意识到可以使用双引号进行转义。在使用@时无法转义双引号一直让我很烦恼。现在感觉自己很蠢。谢谢... - Dustin Davis

84

这也意味着你可以将保留字用作变量名。

比如说你想要一个名为class的类,由于class是一个保留字,你可以将你的类命名为class:

IList<Student> @class = new List<Student>();

4
太酷了,我不知道你可以做到这一点。谢谢。 - Daniel
3
确实如此,但与主题无关。 - Patrick

26

在字符串前加上 @ 表示它应该被视为字面量,即不需要转义。

例如,如果您的字符串包含路径,您通常会这样做:

string path = "c:\\mypath\\to\\myfile.txt";

@符号允许您这样做:

string path = @"c:\mypath\to\myfile.txt";

注意缺少双斜杠(转义符)


10

顺便提一下,您还需要记住“转义”意味着“使用反斜杠作为特殊字符的指示符”。例如,您可以通过这样做在字符串中插入换行符:

String foo = "Hello\

There";

+1 我一直认为换行符只适用于 @"... 样式。 - Dog Ears

2
这是什么意思,为什么要使用@":\"而不是":\"?
因为当你有一个很长的字符串,其中包含许多\时,你不需要对它们进行转义,并且\n、\r和\f也无法正常工作。

不好意思,"string" 这个单词拼错了。 - Emad Armoun

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接