在C#中,变量/标识符前面的@符号是什么意思?

7
我认为我的问题与这个不同:C#中字符串前面的@是什么意思? 我在VB.net中工作,所以这可能是C#中的一些简单的东西,但我不知道。
我有以下代码,其中我有10个XML在一个字符串变量中。请指导在下面代码片段中调用LoadXml方法时,需要在claimsList字符串变量前面添加@符号的原因:
private void UploadNewClaims(PMAUser grumble, string companyAbbreviation, string claimsList)
{
    var claimDoc = new System.Xml.XmlDocument();
    claimDoc.LoadXml(@claimsList);
1个回答

21
在这种情况下,完全没有必要这样做,但它允许您在C#中使用任何关键字作为标识符。它不会改变标识符的含义或使用方式——它只告诉编译器您希望以下字符被识别为关键字。
例如:
string @int = "hello";
var @void = @int;

使用claimsList作为标识符表明编写者不理解它。标识符是字符串变量完全不相关的事实在这里。
个人而言,我几乎只在扩展方法中使用该功能,在那里我已经习惯将第一个参数称为@this:
public static void Foo(this Bar @this)
{
    return @this.Baz() * 2;
}

1
我猜想 @ 符号的存在是因为在某个时候它是一个路径字符串字面量,例如 @"C:\path"。我假设当它被更改为变量时,进行更改的人不理解 @"" 语法,所以保留了 @ 符号。 - Grokys
我谷歌了一下,因为我看到一个扩展方法的参数是 @this。这太有用了。有一点需要注意:在调用时不仅声明变量要使用 @variable,也要使用它。 - C4d

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接