public ArrayList @params { get { return this.paramsField; } set { this.paramsField = value; } }
我搜索了VS 2008 c#文档,但没有找到任何关于它的东西。而且搜索谷歌也没有给我任何有用的答案。那么“@”字符在变量/属性名中的确切含义或用途是什么?
它只是允许您使用保留字作为变量名。恕我直言,不推荐(除非像你这样的情况)。
它只是允许您使用保留字作为变量名。前几天我想要一个名为event的变量。我打算用_event代替,但我的同事提醒我,我可以把它叫做@event。
event
_event
@event
在c#中,at(@)字符用于表示显式不遵守语言规范中相关规则的文字。
具体来说,它可以用于与保留关键字冲突的变量名(例如,你不能使用params,但可以使用@params,与语言规范中的out/ref/任何其他关键字相同)。此外,它可以用于未转义的字符串字面量;这与路径常量特别相关,例如,你可以写path = @"c:\temp\somefile.txt"而不是path = "c:\\temp\\somefile.txt"。它对于正则表达式也非常有用。
path = @"c:\temp\somefile.txt"
path = "c:\\temp\\somefile.txt"
直接来自c#语言规范, identifier (c#) : < / p >
前缀“@”允许使用 关键字作为标识符,也就是 当与其他接口时有用 编程语言。字符@ 是不是实际上的一部分 标识符,所以标识符可能是 在其他语言中被视为正常 标识符,不带前缀。一个 带有@前缀的标识符被调用 一个逐字标识符。
与Perl的符号不同,c#中变量名前的@前缀没有任何意义。如果x是一个变量,则@x是同一变量的另一个名称。
@
x
@x
> string x = "abc"; > Object.ReferenceEquals(x, @x).Dump(); True
但是@前缀确实有一个使用,正如你所发现的那样——你可以用它来澄清c#会拒绝作为非法的变量名。
> string string; Identifier expected; 'string' is a keyword > string @string;
另一个用例是扩展方法。第一个特殊参数可以通过@this名称来区分,以表示其真正含义。一个例子:
@this
public static TValue GetValueOrDefault<TKey, TValue>( this IDictionary<TKey, TValue> @this, TKey key, TValue defaultValue) { if (!@this.ContainsKey(key)) { return defaultValue; } return @this[key]; }
您可以使用它来使用保留关键字作为变量名,如
int @int = 3;
编译器将忽略@并将变量编译为int
int
运用思想并不是一种普遍的做法
@符号允许你为变量名使用保留的关键字。比如@int, @string, @double等等。
@int
@string
@double
例如:
string @public = "Reserved Keyword used for me and its fine";
上面的代码可以正常工作,但是下面的代码不能正常工作:
string public = "This will not compile";