C#中的"@"符号是什么意思?

20

2
重复 - https://dev59.com/VXNA5IYBdhLWcg3wL6yx - ChrisF
6
有趣的事实:你也可以使用字面前缀来区分标识符和关键字。Int32 new;是无效的,但Int32 @new;不是。 - moribvndvs
8个回答

36

这意味着将以下字符串解释为文字字面量。也就是说,字符串中的 \ 实际上会作为输出中的 "\",而不是必须输入 "\\" 才能表示实际字符。


21

在使用字符串之前,它允许不同的字符串格式化规则。您不能使用反斜杠来指定特殊符号和""(双引号变成引号)。我发现这种格式对于正则表达式非常有用。

例子:

Console.WriteLine(@"\n""\/a"); // outputs \n"\/a 
Console.WriteLine("\\n\"\"\\/a"); // outputs \n"\/a
你可能会在变量名前看到 @ 符号。这种情况下,它允许使用 C# 中的特殊关键字作为变量名。
例如:
var @switch = 1;
var @if = "test";

刚刚遇到了这个问题,看起来你对第二行的评论是错误的。输出应该是中间有双引号的 \n""/a。 - user258959
@switch只是另一个变量吗?为什么要这样命名,而不是称呼不是C#关键字的东西? - Stewart

7

这意味着在这样的字符串中不需要转义字符。

因此,如果您想写c:\Windows的路径,可以将其写为

string path = "c:\\Windows";  // Note escaped '\'

或者

string path = @"c:\Windows";  // '\' need not be escaped

我正在努力寻找,但是在你的第一个例子中我看不到双反斜杠... - Rory
已修复。似乎是一些格式问题。 - logicnp

4

3
在C和C++中,字符串有一些特殊字符称为“转义字符”。例如\&"本身就是转义字符!
通常情况下,您要打印像这样的语句:

Nancy Said Hello World! & smiled

您需要设置字符串如下:
string str = "Nancy said Hello World! \& smiled.";

但是,在微软公司中,C#编译器的开发人员推出了一个很酷的新功能,即在任何字符串前添加@,编译器将自动处理所有的转义字符,从而省去了繁琐的手动处理过程。对于上面的例子,你可以在C#中像这样使用:

string str = @"Nancy said Hello World! & smiled.";

1
同意使用分隔符,但我不认为“&”是C#中需要分隔的字符。 - MPritchard

2

同时请参考 https://msdn.microsoft.com/zh-cn/library/ms228362.aspx#Anchor_3。 - Ilya Serbis

0

它允许您在字符串中使用\分隔符。 @"C:\A\b\c\d\e\f"是合法的。


0

用于字符串字面量。它将引号(")内的字符串标记为该值,而不对该字符串中的符号应用任何解释。


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