9

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

#define UNREFERENCED_PARAMETER(P) {(P)=(P);}
#define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}

无论确切的名称和语法是什么,该行的效果是

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

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

尽管对这个问题没有任何影响,但 DevExpress CodeRush Visual Studio 加载项将所有未使用的参数标记为警告,即使在事件处理程序中也是如此。

注意:正如我在评论中所说,我不想使用pragma块。目的是添加一行代码,该代码行引用该参数以作为警告,但不会增加微不足道的开销,就像 windef.h 头文件宏所做的那样。

4

5 回答 5

12

也许丢弃_的是您正在寻找的东西:

void Foo(string parameter)
{
   _ = parameter;
}
于 2019-12-06T09:32:16.480 回答
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;
}

这也让读者清楚地了解这是预期的行为。

更多关于SuppressMessage属性。

于 2013-10-17T20:19:00.427 回答
2

您可以使用以下语法来禁用和重新启用特定警告。包围声明未使用/未引用参数的代码:

#pragma warning disable <warning-number>

// ... code that declares the unused parameter

#pragma warning restore <warning-number>

以上<warning-number>将是您希望禁止的编译器发出的警告编号。大概是C# 警告号 219

于 2013-10-17T20:09:47.573 回答
2

使用 pragma 语句只允许打开或关闭编译器警告。由于您很可能只想影响您正在使用的文件,因此如果后来有人决定在整个项目范围内禁用警告,这将导致问题。在包含 pragma restore 的文件之后编译的每个文件都可能报告不需要的警告。嵌入式开发人员会认识到这是在不知道之前的中断状态是什么的情况下尝试启用和禁用中断的常见问题。

于 2014-09-28T17:09:32.197 回答
-1

这是您可能会使用的 hack:

   namespace YourComapany.Tools{
       class CS
       {
           public static void UNREFERENCED_PARAMETER<T>(T t) {if(t == null) {T d=t;}
       }
   };
...
CS.UNREFERENCED_PARAMETER(whatever);
于 2018-05-09T15:20:55.710 回答