我发现你可以用C#中的'@'字符开始你的变量名.在我的C#项目中,我使用的是用Java编写的Web服务(我添加了对我的项目的Web引用).WSDL中定义的一个接口对象有一个名为"params"的成员变量.显然,这是C#中的保留字,因此您不能拥有名为"params"的成员变量的类.生成的代理对象包含一个如下所示的属性:
public ArrayList @params { get { return this.paramsField; } set { this.paramsField = value; } }
我搜索了VS 2008 c#文档,但找不到任何相关信息.搜索谷歌也没有给我任何有用的答案.那么变量/属性名称中'@'字符的确切含义或用法是什么?
直接来自C#语言规范,标识符(C#) :
前缀"@"允许使用关键字作为标识符,这在与其他编程语言交互时很有用.字符@实际上不是标识符的一部分,因此标识符可能在其他语言中看作普通标识符,没有前缀.带有@前缀的标识符称为逐字标识符.
它只允许您使用保留字作为变量名.不推荐恕我直言(除非你喜欢的情况).
在C#中,at(@)字符用于表示明确不符合语言规范中相关规则的文字.
具体来说,它可以用于与保留关键字冲突的变量名称(例如,您不能使用参数,但您可以使用@params,与语言规范中的out/ref /任何其他关键字相同).此外,它可以用于未转义的字符串文字; 这与路径常量特别相关,例如,而不是path = "c:\\temp\\somefile.txt"
你可以写path = @"c:\temp\somefile.txt"
.它对正则表达式也很有用.
与Perl的sigils不同@
,C#中变量名前面的前缀没有意义.如果x
是变量,@x
则是同一变量的另一个名称.
> string x = "abc"; > Object.ReferenceEquals(x, @x).Dump(); True
但正如您所发现的那样,@
前缀确实有用 - 您可以使用它来澄清C#否则会拒绝的变量名称.
> string string; Identifier expected; 'string' is a keyword > string @string;
该@
符号允许您使用保留关键字作为变量名称.像@int
,@string
,@double
等等.
例如:
string @public = "Reserved Keyword used for me and its fine";
上面的代码工作正常,但下面的代码不起作用:
string public = "This will not compile";