【问题标题】:What is the @ syntax in C# [duplicate]C#中的@语法是什么[重复]
【发布时间】:2011-12-28 15:03:44
【问题描述】:

可能重复:
What's the use/meaning of the @ character in variable names in C#?

我在几个地方看到过,包括 Resharper 转换的代码...

SomeClass @object = new SomeClass( ... );

我以为是匿名的,但我认为我错了

这真的意味着什么吗?

【问题讨论】:

    标签: c#


    【解决方案1】:

    前缀“@”允许使用关键字作为标识符,即 在与其他编程语言交互时很有用。这 字符@实际上不是标识符的一部分,所以标识符 可能在其他语言中被视为普通标识符,没有 字首。带有@前缀的标识符称为逐字 标识符。

    示例:

    class @class
    {
       public static void @static(bool @bool) {
          if (@bool)
             System.Console.WriteLine("true");
          else
             System.Console.WriteLine("false");
       }   
    }
    

    见:http://msdn.microsoft.com/en-us/library/aa664670.aspx

    【讨论】:

      【解决方案2】:

      它允许您使用保留关键字作为标识符。例如,我遇到的一个常见场景是在定义锁定对象时,例如

      object lock = new object(); // this would throw a compiler error as `lock` is a reserved word.
      

      所以我必须在它前面加上 @ 符号来告诉编译器这不是类型而是文字:

      object @lock = new object();
      

      附带说明,如果您遇到这样的冲突,这通常是一个很好的指标,表明您的标识符描述性不够。

      【讨论】:

      • 你能举个例子吗,我不太明白
      【解决方案3】:

      这背后的原因是 object 在 C# 中是一个受保护的关键字。 @ 符号将告诉编译器这应该是变量的名称,并且不应与 objectkeyword 混淆。

      【讨论】:

        【解决方案4】:

        它的意思是“文字”,即“这个名字不是关键字或类型标识符”。没有它,object 将被视为一种类型。

        【讨论】:

          【解决方案5】:

          this question 中查看我的回答。

          @ 符号允许您在变量名中使用reserved words

          int @class = 1;
          
          void MyMethod(int @goto);
          
          bool @public { get; set; }
          

          【讨论】:

          • 我不同意 Resharper 是错误的。它只是将其标记出来,因为它可能不是在 any 编译器关键字(不管保留/上下文)之后命名变量的最佳方法。
          • 我同意这根本不是在任何编译器关键字之后命名变量的最佳方法,但我认为如果它不是最好的方法,让它出错,而不是尝试修复所有问题,尤其是那些甚至不会导致任何错误的问题! ;)
          【解决方案6】:

          关键字 是预定义的保留标识符,对编译器具有特殊含义。除非它们包含 @ 作为前缀,否则它们不能用作程序中的标识符。例如,@if 是合法标识符,但 if 不是,因为它是关键字。

          参考这个C# Keywords

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-06-09
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2020-04-18
            • 1970-01-01
            相关资源
            最近更新 更多