我知道 @ 符号可以在字符串字面值前使用,以改变编译器解析字符串的方式。但是,如果变量名以 @ 符号为前缀,这意味着什么?
我知道 @ 符号可以在字符串字面值前使用,以改变编译器解析字符串的方式。但是,如果变量名以 @ 符号为前缀,这意味着什么?
@符号允许您使用保留字。例如:
int @class = 15;
上述方法可行,而下面的方法则不行:
int class = 15;
@
符号,因为这是表达某些内容的唯一方式。例如,如果您想设置元素的class属性,则会键入new { @class = "mc" };
,即使您只是想输入"class",也必须这么做。我的观点是,@
符号不是变量实际名称的一部分。 - MasterMastic@符号在C#中有两个用途:
首先,它允许你将保留关键字用作变量,例如:
int @int = 15;
第二个选项允许您指定一个字符串而无需转义任何字符。例如,'\'字符是转义字符,因此通常需要这样做:var myString = "c:\\myfolder\\myfile.txt"
或者你可以这样做:
var myString = @"c:\myFolder\myfile.txt"
$"a string"
允许值插入。因此,string.Format("Your value is {0}.", value)
现在可以写成 $"Your value is \"{value}\"."
。您可以将它们组合使用字面字符串插值,例如 $@"Your value is ""{value}""."
。(请注意每个版本中双引号转义的差异。) - ErikE其他答案忽略的一个重要点是,在CIL中,“@keyword”编译成“keyword”。
因此,如果您有一个在F#中制作的框架,需要您定义一个名为“class”的属性的类,您实际上可以这样做。
实际上并不是非常有用,但如果没有它,C#将无法进行某些形式的语言互操作性。
我通常看到它用于避免关键字限制(通常在局部变量名称上,在这种情况下,这是唯一的影响),即。
private void Foo(){
int @this = 2;
}
但我强烈反对这样做!只需找另一个名称,即使“最佳”变量名称是保留名称之一。
它允许您将C#关键字用作变量。例如:
class MyClass
{
public string name { get; set; }
public string @class { get; set; }
}