如何引用未使用的参数?

Sar*_*ger 5 c# parameters devexpress visual-studio

早在C / C ++时代,Microsoft就使用了#define,它允许程序员引用未使用的参数。该声明是windef.h的一部分,它是:

#define UNREFERENCED_PARAMETER(P) {(P)=(P);}
#define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
Run Code Online (Sandbox Code Playgroud)

无论确切的名称和语法如何,该行都具有以下作用:

  1. 告诉编译器不要将此未使用的参数标记为警告
  2. 编译器的后期阶段很聪明,不会在二进制文件中包含该行(或者我记得)
  3. 从视觉上告诉查看者,未引用的参数不是疏忽。

C#中是否有类似的语法?

尽管此问题没有什么区别,但DevExpress CodeRush Visual Studio加载项会将所有未使用的参数(即使在事件处理程序中)也标记为警告。

注意:正如我在评论中所述,我不想使用pragma块。目的是添加一行代码,为警告起见引用该参数,但不增加任何琐碎的开销,就像windef.h头文件宏所做的那样。

小智 11

也许丢弃_是你正在寻找的:

void Foo(string parameter)
{
   _ = parameter;
}
Run Code Online (Sandbox Code Playgroud)

  • 通常,`_` 意味着“有一个参数被传入,但我不会使用它,所以例如 lamda 表达式 `thing.Any(_ => 1);` 看到 `_ =parameter` 看起来很奇怪的。 (3认同)

use*_*389 6

使用该SuppressMessage属性,您可以随时随地抑制警告:

[SuppressMessage("Microsoft.Performance", "CA1801:ReviewUnusedParameters", MessageId = "isChecked")]
[SuppressMessage("Microsoft.Performance", "CA1804:RemoveUnusedLocals", MessageId = "fileIdentifier")]
static void FileNode(string name, bool isChecked)
{
   string fileIdentifier = name;
   string fileName = name;
   string version = String.Empty;
}
Run Code Online (Sandbox Code Playgroud)

这也让读者明确理解这是预期行为。

有关SuppressMessage属性的更多信息。