8

我正在浏览StyleCop 的源代码,发现了一件奇怪的事情:

/// <summary>
/// The namespace that the rule is contained within.
/// </summary>
private string @namespace;

// [...]

internal Rule(string name, string @namespace, string checkId, string context, bool warning) : this(name, @namespace, checkId, context, warning, string.Empty, null, true, false)
{
    Param.Ignore(name, @namespace, checkId, context, warning);
}

这是什么?它只是一个简单的字段,其中 at-sign 用于指示它是一个字段,而不是namespace关键字?如果是这样,是否可以将 at-sign 用于任何保留字(例如@dynamic,@using等)?

4

5 回答 5

6

基本上是的。将 @ 放在变量名前面会阻止由于该变量名是关键字而发生的错误。

http://msdn.microsoft.com/en-us/library/x53a06bb(VS.71).aspx

于 2010-05-12T11:25:53.857 回答
4

是的 @ 符号可以放在保留字的前面,以允许它们用作变量名。

var @dynamic = ...
var @event = ....

我实际上从这个问题中学到了这一点和其他东西

于 2010-05-12T11:25:50.690 回答
1

是的,您可以@用作变量的first and only first字符。

于 2010-05-12T11:26:39.687 回答
1

这种技术通常与自动代码生成配对,因为可能会生成作为目标语言中的关键字的标识符,例如,如果 Xml 模式在其上运行代码生成以生成 C# 类,则该模式可能具有称为“事件”的属性。这是一个 C# 关键字,因此代码生成器可以改用“@event”。

于 2010-05-12T11:44:48.520 回答
0

正如其他人回答的那样,您可以使用保留关键字,只要您在前面加上'@'前缀,但恕我直言,这不是一个好的开发实践。我宁愿只在机器生成的代码中使用它(例如,在我工作的公司中,我们有一个将 Java 代码转换为 C# 的工具;因为在 Java 中“事件”不是保留字,我们的 Java 源代码可能包含此类标识符)

最好的

阿德里亚诺

于 2010-05-12T11:31:01.330 回答