【问题标题】:What does '@' char mean before parameter name in method declaration? [duplicate]方法声明中参数名称前的“@”字符是什么意思? [复制]
【发布时间】:2011-06-11 19:06:06
【问题描述】:

可能的重复:
What does the @ symbol before a variable name mean in C#?
What's the use/meaning of the @ character in variable names in C#?

嗨,

我有一个简单的问题。方法声明中的参数名称之前的“@”字符是什么意思?如下:

protected void Method1(Type1 @arg1, Type2 arg2)
...

我在 .net 3.5 中使用 c#。

谢谢。

【问题讨论】:

标签: c# .net-3.5


【解决方案1】:

它允许使用保留字作为标识符。它通常由代码生成器使用,这些代码生成器可能使用来自系统的源名称,其关键字与目标语言不同,例如表名和 sproc 参数名。

【讨论】:

  • @BoltClock:是的,有时它被多余地使用了。我只能想象最初这样做的程序员不知道这意味着什么,但在某处看到它并认为它看起来很酷。或者,正如答案所指出的,这有时是由自动代码生成器完成的。
  • @BoltClock 不,不是,但代码生成器不知道。代码生成器通常将 @ 符号放在所有标识符的前面。
【解决方案2】:

这是一种转义标识符的方法。

例如以下两个是等价的:

protected void Method1(Type1 @arg1, Type2 arg2)
protected void Method1(Type1 arg1, Type2 arg2)

@ 仅在您需要在关键字后命名标识符时才真正有用。如果没有@,以下内容将无法编译:

protected void Method1(Type1 @class, Type2 arg2)

【讨论】:

    【解决方案3】:

    对于您的具体示例,它没有任何意义。在 C# 中,@ 符号用于对关键字进行转义,以便它们可以用作变量名。

    例如,以下会产生编译器错误:

    public void Test(string class){...}
    

    但是如果你用@转义就可以了:

    public void Test(string @class){...}
    

    【讨论】:

      【解决方案4】:

      用于有保留字作为参数。示例:

      string @string = "abc";
      

      或:

      string @class = "foo";
      

      arg1 不是保留字,因此不需要使用@。话虽如此,使用保留字来命名参数并不是一个好主意。尽管在某些情况下这很有用。例如,在 ASP.NET MVC 中,一些 HTML 扩展方法将匿名对象作为参数来发出 html 属性。所以你有这样的语法:

      <%= Html.ActionLink("text", "action", "controller", null, new { @class = "abc" }) %>
      

      生成:

      <a href="/controller/action" class="abc">text</a>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-08-26
        • 2012-05-09
        • 2016-09-13
        • 2012-12-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多