【问题标题】:C# prefixing parameter names with @ [duplicate]C#在参数名称前加上@ [重复]
【发布时间】:2010-11-05 12:54:05
【问题描述】:

可能重复:
What does the @ symbol before a variable name mean in C#?

复制:

What does the @ symbol before a variable name mean in C#?

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

public static void SomeStaticMethod( SomeType @parameterName ) { }

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

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

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

    }
}

这是为什么?

【问题讨论】:

标签: c#


【解决方案1】:

尝试创建一个名为 class 的变量,看看会发生什么——你会注意到你得到了一个错误。

这让您可以使用保留字作为变量名。

不相关,您还会注意到带有 @ 前缀的字符串——这不是一回事......

string says = @"He said ""This literal string lets me use \ normally 
    and even line breaks"".";

这允许您使用字符串的“文字”值,这意味着您可以有新的行或字符而无需转义等...

【讨论】:

  • 我熟悉使用 @ 为字符串添加前缀 :) 但是为变量名添加前缀对我来说是新事物。反正你的解释很清楚。
  • 我喜欢这个字符串交叉信息,可能对一些读者有用。
【解决方案2】:

@ 前缀允许您在 C# 中使用类、接口、事件等保留字作为变量名。所以你可以这样做

int @int = 1

【讨论】:

  • 那个例子会让我做噩梦。
  • 哈哈!我知道。我无情地追捕这样的代码并将其吹走!
  • 也许应该用类似 int @double = (int)(1.0/0.0); 的东西来更新这个例子。然后至少整个事情是痛苦的。
【解决方案3】:

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

【讨论】:

  • 这可能是个坏主意...
  • 我知道我总是避免这样做,但这是一个可用的功能。
  • Dervin:在某些情况下,您确实无法避免,例如与用其他语言或以前版本的 C# 编写的程序集交互。
  • 但同时,当您无法预测该语言的未来版本中可能会引入哪些新关键字时,这有点必要......毕竟您可能有一个使用“动态”作为 4.0 之前的库符号名称,否则您将无法再从 4.0 应用程序完全访问...
  • 自 C# 1.0 起没有添加新的保留字,只有上下文关键字。动态也是如此。 blogs.msdn.com/ericlippert/archive/2009/05/11/…
猜你喜欢
  • 2011-02-12
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多