在方法声明中参数名称之前'@'char的含义是什么?

时间:2011-01-19 14:15:04

标签: c# .net-3.5

  

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

您好,

我有一个简单的问题。在方法声明中参数名称之前'@'char的含义是什么?如下:

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

我使用c#和.net 3.5。

感谢。

4 个答案:

答案 0 :(得分:20)

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

答案 1 :(得分:8)

这是一种逃避标识符的方法。

E.g。以下两个是等价的:

protected void Method1(Type1 @arg1, Type2 arg2)
protected void Method1(Type1 arg1, Type2 arg2)
如果您需要在关键字后面命名标识符,

@才真正有用。如果没有@

,下面的代码就无法编译

protected void Method1(Type1 @class, Type2 arg2)

答案 2 :(得分:3)

用于将保留字作为参数。例如:

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>

答案 3 :(得分:2)

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

例如,以下内容会生成编译器错误:

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

但如果你用@逃脱,那很好:

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