何时在c#中使用@?


when to use @ in c#?

我只在本地路径中使用@符号,但什么时候使用@呢?


在字符串前使用@可避免转义特殊字符。

来自msdn的信息:

The advantage of @-quoting is that
escape sequences are not processed,
which makes it easy to write, for
example, a fully qualified file name:

@"c:\Docs\Source\a.txt" // rather
than"c:\\Docs\\Source\\a.txt"


在任何你不想让事物的默认意义持续存在的地方,你都可以使用@。例如,@class将使类成为标识符。@bool将使bool成为标识符而不是关键字。

您知道@before字符串的用法。它用于表示将字符串的所有文本逐字带出,而不专门处理字符串中的任何字符。

编辑:是的,另一件事是,@Keyword在IL中被编译成Keyword

有关详细信息,请参阅此链接。


字符串常数

c中字符串文字之前的@表示逐字字符串。在逐字字符串中,只有引号转义序列(""被解析为转义序列;其他所有序列,如
\t等都被忽略。

您将看到文件路径等使用的这种语法,因为让编译器忽略路径中的反斜杠很方便,而不必对它们进行双重转义,例如。

1
var s = @"c:\Some\File\Path.txt";

读起来比

1
var s ="c:\\Some\\File\\Path.txt";

保留词

您还可以在标识符前面加上@以允许在标识符中使用保留字。例如,可以将@class用作标识符,而不允许使用class。在这种特定的情况下,与通常用于解决其他语言的klassclazz的约定相比,@class稍微不那么刺耳(至少我发现)。


如果要使用关键字作为变量名

1
string @string ="Hi";


可以在字符串前面加上@符号,以避免键入2个反斜杠来表示一个反斜杠。这就是为什么它经常用于本地路径的原因,因为它节省了一些输入,并且简化了稍后阅读时看到的内容。当你有一堆双引号和其他转义字符时,也就是特殊字符——这时你需要@符号。当您使用@符号时,请确保在您表示反斜杠时只放一个反斜杠。使用@时,要使用双引号字符,请使用两个双引号而不是反斜杠双引号。

1
String path ="C:\\path\\to\\my\\file";

VS

1
String path = @"C:\path\to\my\file"; //@ says one backslash is enough

下面是另一个例子:

1
String quotation ="He said, "Wow!""; //backslashes say not to end string

VS

1
String quotation = @"He said,""Wow!"""; //need a different method of denoting double quote