我在VS2010上使用ReSharper插件,我正在生成一个接口方法.ReSharper在参数名称上加了@.那用的是什么?
int Count(Func<ContratoList, bool> @where);
Run Code Online (Sandbox Code Playgroud)
什么是差异
int Count(Func<ContratoList, bool> where);
Run Code Online (Sandbox Code Playgroud)
谢谢!
Con*_*ell 41
该@符号允许您使用变量名中的保留字.
int @class = 1;
void MyMethod(int @goto);
bool @public { get; set; }
Run Code Online (Sandbox Code Playgroud)
正如Marc在他的评论及其回答中正确指出的那样,ReSharper实际上是错误的,因为它where是一个Contextual Keyword,实际上并不是一个保留字,所以你的方法将在没有@.
Mar*_*ell 26
在许多方面,resharper做错了.where是一个上下文关键字,意思是:它只在一些非常特定的场景(即LINQ)中充当关键字.在所示的位置,它实际上什么也没做.它不会被混淆为关键字,因为当C#语言设计者向C#添加关键字时,他们需要确保预先存在的代码继续编译(尽可能),这在早期的C#中是合法的.
使用@也会使一些工具混淆/复杂化(特别是剃刀,因为剃刀已经@用来表示代码的开始 - 意味着对于变量使用@(即@string)有时你需要@,有时你需要@@- 而且我知道至少有一个这可能导致误报IDE警告).
然而!如果参数是if或class等,则@if/ @class允许您将其用作变量名而不是混淆为C#关键字.注意,这也不是一个好主意.但出于同样的原因,我们不会开始对我们所有的代码(string @name = ...等)开始这样做- 所以为什么要在这里呢?它不是必需的,正如这个问题所证明的那样,它增加了混乱.
但就个人而言,我会找到一个不是关键字或上下文关键字的参数名称.
| 归档时间: |
|
| 查看次数: |
909 次 |
| 最近记录: |