方法参数的C#@修饰符
我在VS2010上使用ReSharper插件,并生成一个接口方法。 ReSharper在参数名上加了一个@。那是用来干什么的方法参数的C#@修饰符,c#,resharper,C#,Resharper,我在VS2010上使用ReSharper插件,并生成一个接口方法。 ReSharper在参数名上加了一个@。那是用来干什么的 int Count(Func<ContratoList, bool> @where); int计数(Func@where); 有什么区别 int Count(Func<ContratoList, bool> where); int计数(Func其中); 谢谢 符号@允许您在变量名称中使用 int @class = 1; void MyMe
int Count(Func<ContratoList, bool> @where);
int计数(Func@where);
有什么区别
int Count(Func<ContratoList, bool> where);
int计数(Func其中);
谢谢 符号
@
允许您在变量名称中使用
int @class = 1;
void MyMethod(int @goto);
bool @public { get; set; }
正如马克在他的评论和回答中正确指出的那样,ReSharper这样做实际上是错误的,因为
其中
是一个,实际上不是一个保留字,因此,您的方法将在不使用@
的情况下编译。它允许您使用保留字作为参数。它允许您使用保留关键字作为变量名。之所以这样做,是因为在C#(LINQ)中,“where”是受保护的关键字。它将停止此参数作为关键字的行为(正如其中
在linq中是一个关键字等)。在许多方面,resharper这样做是错误的。其中
是一个上下文关键字,意思是:它只在一些非常特定的场景(即linq)中充当关键字。在指定的位置,它实际上没有任何作用。它不会被混淆为关键字,因为当C语言设计者向C添加关键字时,他们需要确保现有代码继续编译(尽可能),而这在早期的C中是合法的
@
的使用也会使一些工具混淆/复杂化(特别是razor,因为razor已经使用@
来指示代码的开始-这意味着对于使用@
的变量(即@string
)有时您需要@
,有时您需要@
——据我所知,这可能会导致至少一个误报IDE警告)
但是!如果参数是If
或class
等,那么@If
/@class
允许您将其用作变量名,而不是将其混淆为C关键字。注意,这也不是一个好主意。但是出于同样的原因,我们不会对所有代码都这样做(string@name=…
等)-那么为什么要在这里这样做呢?它不是必需的,而且正如这个问题所证明的,,它增加了混乱
不过,就我个人而言,我会找到一个不是关键字或上下文关键字的参数名。它不会在那个位置充当关键字。@Marc-这是一个很好的观点。它必须只是作为一个一般规则应用它-我想,试图通过上下文完美地完成它将是一个更大的挑战。
其中
显然不是保留关键字;它是一个上下文关键字。这意味着实际上,问题中的@where
实现了:完全没有。是的,你是对的。它确实说在我包含在答案中的链接中,但我假设它与where
相同,因为这个问题。不过,我对你的答案投了更高的票,很好!Resharper太热情了将@添加到东西中。可能还值得添加的是,其中
不仅是一个LINQ关键字,而且还用于泛型类型约束是的,设计师正试图确保现有代码不会尽可能地中断。然而,当一个星期一的早上,几个月来没有人接触过的模块sudd时,我非常惊讶enly拒绝构建。事实证明,它使用了async
作为方法参数名。士气:周末前不要安装async CTP查看这篇关于@
逐字操作的帖子