583

可能重复:
C# 中变量名中的 @ 字符的用途/含义是什么?

我知道可以在字符串文字之前使用 @ 符号来更改编译器解析字符串的方式。但是,当变量名以 @ 符号为前缀时,这意味着什么?

4

4 回答 4

738

@ 符号允许您使用保留字。例如:

int @class = 15;

上述工作,当以下不会:

int class = 15;
于 2009-01-09T20:12:58.063 回答
444

@ 符号在 C# 中有两个用途:

首先,它允许您使用保留关键字作为变量,如下所示:

int @int = 15;

第二个选项允许您指定一个字符串,而不必转义任何字符。例如 '\' 字符是一个转义字符,所以通常你需要这样做:

var myString = "c:\\myfolder\\myfile.txt"

或者你可以这样做:

var myString = @"c:\myFolder\myfile.txt"
于 2009-01-09T20:17:46.493 回答
63

其他答案忘记的重要一点是,“@keyword”在 CIL 中被编译为“keyword”。

因此,如果您有一个框架,例如,F#,它要求您定义一个具有名为“class”的属性的类,您实际上可以这样做。

它在实践中并没有那么有用,但没有它会阻止 C# 进行某些形式的语言互操作。

我通常看到它不是用于互操作,而是为了避免关键字限制(通常在局部变量名上,这是唯一的效果),即。

private void Foo(){
   int @this = 2;
}

但我强烈反对!只需找到另一个名称,即使变量的“最佳”名称是保留名称之一。

于 2009-01-09T20:26:27.070 回答
15

它允许您使用 C# 关键字作为变量。例如:

class MyClass
{
   public string name { get; set; }
   public string @class { get; set; }
}
于 2009-01-09T20:13:41.683 回答