C#前缀参数名称@

Fre*_*els 72 c#

可能重复:
变量名前的@符号在C#中是什么意思?

重复:

变量名前面的@符号在C#中是什么意思?

有时我会看到一些C#代码,其中一个方法参数以@为前缀,如下所示:

public static void SomeStaticMethod( SomeType @parameterName ) { }
Run Code Online (Sandbox Code Playgroud)

这是什么意思 ?它有一些重要的特殊含义吗?

我在NHibernate中创建一个EventListener,当我让VS.NET生成接口方法时,它生成如下的OnPostLoad方法:

public class PostLoadEventListener : IPostLoadEventListener
{
    public void OnPostLoad( PostLoadEvent @event )
    {

    }
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样 ?

Hug*_*are 111

尝试创建一个名为class的变量,看看会发生什么 - 你会发现你收到错误.

这允许您使用保留字作为变量名.

不相关的,你也会注意到以@为前缀的字符串 - 这不是一回事......

string says = @"He said ""This literal string lets me use \ normally 
    and even line breaks"".";
Run Code Online (Sandbox Code Playgroud)

这允许你使用字符串的'literal'值,这意味着你可以有没有转义的新行或字符等...

  • 我熟悉使用@ :)为字符串添加前缀但是前缀变量名对我来说是新的.无论如何,你的解释非常明确. (3认同)

Rad*_*Rad 43

@前缀允许您使用类,接口,事件等保留字作为C#中的变量名.所以你可以做到

int @int = 1
Run Code Online (Sandbox Code Playgroud)

  • 那个例子会给我做噩梦. (26认同)
  • 哈哈!我知道.我无情地追捕这些代码然后把它吹掉! (4认同)
  • 也许这个例子应该用int @double =(int)(1.0/0.0);来更新.然后至少整个事情是痛苦的. (4认同)

Tim*_*ter 20

event是一个C#关键字,@是一个转义字符,允许您使用关键字作为变量名.

  • 这可能是一个坏主意...... (13认同)
  • Dervin:有些情况下你无法真正避免它,例如与用其他语言或以前版本的C#编写的程序集连接. (6认同)
  • 但同时有点必要,当你无法预测在未来的语言版本中可能会引入什么新的关键字...你可能会有一个4.0之前的库,它使用'dynamic'作为符号名称,否则你就不会更长时间能够从4.0应用程序完全访问... (3认同)
  • 我知道我总是避免这样做,但它是一个可用的功能. (2认同)
  • 自 C# 1.0 以来,没有添加新的保留字,仅添加上下文关键字。动态也是如此。http://blogs.msdn.com/ericlippert/archive/2009/05/11/reserved-and-contextual-keywords.aspx (2认同)