ChatGPT解决这个技术问题 Extra ChatGPT

C#中变量名前的@符号是什么意思? [复制]

这个问题在这里已经有了答案:11 年前关闭。

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

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


M
Michael Meadows

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

int @class = 15;

上述工作,当以下不会:

int class = 15;

它与下划线有什么不同?
使用@ 符号,名称在程序集中记录为“类”,而带有下划线的名称是“_class”。因此,如果另一种 .NET 语言没有将“类”定义为保留字,它们可以只使用“类”这个名称。
如果你使用@class 作为属性名,你可以像这样访问它:MyClass.class 而不是 MyClass._class
就在您认为自己了解有关 C# 的所有知识时,您就会学到一些新东西。 :)
@Vilx- 在 ASP.net MVC 中使用它很常见,因为这是表达某些东西的唯一方式。例如,如果您想设置元素的类属性,即使您的意思只是“类”,您也要输入 new { @class = "mc" };,这是唯一的方法。我要说明的一点是,@ 不是 变量实际名称的一部分。
w
ww1711

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

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

int @int = 15;

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

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

或者你可以这样做:

var myString = @"c:\myFolder\myfile.txt"

它如何影响字符串正是我所寻找的。谢谢!
谢谢,@ 字符串的用法正是我想要的
您仍然需要通过加倍来转义双引号。
这是更好的答案IMO
@CyberneticTwerkGuruOrc虽然这是一个更详细的答案,但它超出了OP的要求,但标记的答案解决了@与变量一起使用时的具体问题,因此(IMO)是更正确的答案。
R
Rasmus Faber

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

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

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

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

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

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


这可能是个好建议。我认为 @ 限定符相当于 VB.Net 的方括号,所以 VB 等价物是:dim [Class] as Int32 = 15
@Michael 这完全等同于 VB.NET 的方括号语法。 stackoverflow.com/questions/6639688/… 指出 F# 出于相同目的在标识符周围使用双反引号。
作为迟到的评论 - “不是很有用” - 在 MVC 中,这是您可以将名为“class”的属性传递给渲染 e 的方式 - 它变成 html“class” 来定义 CSS 类。
J
Joel Coehoorn

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

class MyClass
{
   public string name { get; set; }
   public string @class { get; set; }
}