我发现在c#中可以用“@”字符开始变量名。 在我的c#项目中,我使用了一个用Java编写的web服务(我在我的项目中添加了一个web引用)。WSDL中定义的一个接口对象有一个名为“params”的成员变量。显然,这在c#中是一个保留词,所以你不能有一个类的成员变量名为“params”。生成的代理对象包含一个如下所示的属性:

public ArrayList @params {
    get { return this.paramsField; }
    set { this.paramsField = value; }
}

我搜索了VS 2008 c#文档,但没有找到任何关于它的东西。而且搜索谷歌也没有给我任何有用的答案。那么“@”字符在变量/属性名中的确切含义或用途是什么?


当前回答

它只是允许您使用保留字作为变量名。前几天我想要一个叫event的var。我打算用_event代替,但我的同事提醒我,我可以把它叫做@event。

其他回答

直接来自c#语言规范,标识符(c#) :

前缀“@”允许使用 关键字作为标识符,也就是 当与其他接口时有用 编程语言。字符@ 是不是实际上的一部分 标识符,所以标识符可能是 在其他语言中被视为正常 标识符,不带前缀。一个 带有@前缀的标识符被调用 逐字标识符。

它只是允许您使用保留字作为变量名。前几天我想要一个叫event的var。我打算用_event代替,但我的同事提醒我,我可以把它叫做@event。

它只是允许您使用保留字作为变量名。恕我直言,不推荐(除非像你这样的情况)。

符号@允许您为变量名使用保留的关键字。比如@int, @string, @double等。

例如:

string @public = "Reserved Keyword used for me and its fine";

上面的代码可以正常工作,但是下面的代码不能正常工作:

string public = "This will not compile";

另一个用例是扩展方法。第一个特殊参数可以用@this name来区分,以表示其真实含义。一个例子:

public static TValue GetValueOrDefault<TKey, TValue>(
    this IDictionary<TKey, TValue> @this,
    TKey key,
    TValue defaultValue)
    {
        if (!@this.ContainsKey(key))
        {
            return defaultValue;
        }

        return @this[key];
    }