方法参数的C#@修饰符
我在VS2010上使用ReSharper插件,我正在生成一个接口方法。 ReSharper在参数名称上加上@。 那用的是什么?
int Count(Func @where);
什么是差异
int Count(Func where);
谢谢!
@
符号允许您在变量名中使用保留字 。
int @class = 1; void MyMethod(int @goto); bool @public { get; set; }
正如Marc在他的评论及其回答中正确指出的那样,ReSharper实际上是错误的,因为Context是关键字 ,而实际上并不是保留字,所以你的方法将在没有@
情况下编译。
在许多方面,resharper做错了。 where
是一个上下文关键字,意思是:它仅在某些特定场景(即LINQ)中充当关键字。 在所示的位置,它实际上什么也没做。 它不会被混淆为关键字,因为当C#语言设计者向C#添加关键字时,他们需要确保预先存在的代码继续编译(尽可能),这在早期的C#中是合法的。
@
的使用也使某些工具混淆/复杂化(特别是razor,因为razor已经使用@
来表示代码的开始 – 这意味着对于使用@
的变量(即@string
),有时你需要@
,有时你需要@@
– 我知道至少有一个假阳性的IDE警告可能导致这种情况。
然而! 如果参数是if
或class
等,则@if
/ @class
允许您将其用作变量名而不是混淆为C#关键字。 注意,这也不是一个好主意。 但出于同样的原因,我们不会开始对我们所有的代码( string @name = ...
等)这样做 – 所以为什么要在这里呢? 它不是必需的, 正如这个问题所certificate的那样 ,它增加了混乱。
但就个人而言,我会找到一个不是关键字或contextual-keyword的参数名称。
它允许您使用保留关键字作为变量名称。
它会使这个参数像关键字一样停止(因为linq中的关键字在其他地方)。
这样做是因为’where’是C#(LINQ)中受保护的关键字
它允许您使用保留字作为参数。