Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
方法参数的C#@修饰符_C#_Resharper - Fatal编程技术网

方法参数的C#@修饰符

方法参数的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

我在VS2010上使用ReSharper插件,并生成一个接口方法。 ReSharper在参数名上加了一个@。那是用来干什么的

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查看这篇关于
@
逐字操作的帖子