c# @方法参数的修饰符
本文关键字:参数 方法 | 更新日期: 2023-09-27 18:13:43
我在VS2010上使用ReSharper插件,我正在生成一个接口方法。ReSharper在参数名上加了一个@。那是干什么用的?
int Count(Func<ContratoList, bool> @where);
有什么不同?int Count(Func<ContratoList, bool> where);
谢谢!
@
符号允许在变量名中使用保留字。
int @class = 1;
void MyMethod(int @goto);
bool @public { get; set; }
正如Marc在他的评论和回答中正确指出的那样,ReSharper这样做实际上是错误的,因为where
是一个上下文关键字,实际上不是一个保留字,所以你的方法将在没有@
的情况下编译。
在很多方面,resharper这样做是错误的。where
是一个上下文关键字,这意味着:它只在一些非常特定的场景(如LINQ)中充当关键字。在指示的位置上,它实际上什么也不做。它不会被混淆为关键字,因为当c#语言设计者向c#添加关键字时,他们需要确保预先存在的代码继续编译(尽可能地),而这在早期的c#中是合法的。
@
的使用也使一些工具(特别是razor,因为razor已经使用@
来指示代码的开始-这意味着对于使用@
(即@string
)的变量,有时您需要@
,有时您需要@@
-我知道这可能导致至少一个假阳性IDE警告)。
!如果参数是if
或class
等,那么@if
/@class
允许您将其用作变量名,而不会被混淆为c#关键字。注意,也不是一个好主意。但是出于同样的原因,我们不会对所有代码(string @name = ...
等)开始这样做-那么为什么在这里这样做呢?它是不需要的,而且如这个问题所示,它增加了混淆。
就我个人而言,我希望找到一个不是关键字或上下文关键字的参数名。
允许使用保留关键字作为变量名
它将阻止该参数像关键字一样工作(因为where
在linq中是一个关键字)
这是因为'where'在c# (LINQ)中是受保护的关键字
允许使用保留字作为参数