C# 变量名中 @ 字符的用途/含义是什么?
-
01-07-2019 - |
题
我发现您可以在 C# 中以“@”字符开头变量名。在我的 C# 项目中,我使用了用 Java 编写的 Web 服务(我向我的项目添加了 Web 引用)。WSDL 中定义的接口对象之一有一个名为“params”的成员变量。显然,这是 C# 中的保留字,因此您不能拥有一个包含名为“params”的成员变量的类。生成的代理对象包含一个如下所示的属性:
public ArrayList @params {
get { return this.paramsField; }
set { this.paramsField = value; }
}
我搜索了 VS 2008 c# 文档,但找不到任何相关内容。搜索谷歌也没有给我任何有用的答案。那么变量/属性名称中“@”字符的确切含义或用途是什么?
其他提示
它只是允许您使用保留字作为变量名。恕我直言,不推荐(除非像你这样的情况)。
在 C# 中,at (@) 字符用于表示明确不遵守语言规范中相关规则的文字。
具体来说,它可用于与保留关键字冲突的变量名称(例如您不能使用 params,但可以使用 @params 代替,与语言规范中的 out/ref/任何其他关键字相同)。此外,它还可用于未转义的字符串文字;这与路径常量尤其相关,例如代替 path = "c:\\temp\\somefile.txt"
你可以写 path = @"c:\temp\somefile.txt"
. 。它对于正则表达式也非常有用。
与 Perl 的印记不同, @
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
ETC。
例如:
string @public = "Reserved Keyword used for me and its fine";
上面的代码工作正常,但下面的代码不起作用:
string public = "This will not compile";
它只是允许您使用保留字作为变量名。我想要一个名为 event
另一天。我本来打算和 _event
相反,但我的同事提醒我,我可以直接调用它 @event
反而。
另一个用例是扩展方法。第一个特殊参数可以通过以下方式区分以表示其真正含义 @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
使用思想并不是一种常见的做法