回到C / C ++时代,微软有一个#define
,它允许程序员引用一个未使用的参数。声明是windef.h的一部分,是:
#define UNREFERENCED_PARAMETER(P) {(P)=(P);}
#define UNREFERENCED_LOCAL_VARIABLE(L) {(L)=(L);}
无论具体名称和语法如何,该行都具有
的效果C#中是否有类似的语法?
尽管这个问题没什么区别,但DevExpress CodeRush Visual Studio加载项会将所有未使用的参数标记为事件处理程序,即使在事件处理程序中也是如此。
注意:
正如我在评论中所说,我不想使用pragma
块。目的是添加一行引用参数的代码以用于警告,但是添加任何代码都不会产生微不足道的开销,就像windef.h头文件宏所做的那样。
答案 0 :(得分:4)
使用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属性的更多信息。
答案 1 :(得分:1)
您可以使用以下语法来禁用和重新启用特定警告。围绕声明未使用/未引用的参数的代码:
#pragma warning disable <warning-number>
// ... code that declares the unused parameter
#pragma warning restore <warning-number>
上面的<warning-number>
将是您希望抑制的编译器发出的警告编号。据推测那将是C# warning number 219。
答案 2 :(得分:1)
使用pragma语句只允许打开或关闭编译器警告。由于您很可能只想影响您正在使用的文件,如果有人后来决定禁用警告项目,这将导致问题。在包含pragma还原的文件之后编译的每个文件都可能会报告不需要的警告。 嵌入式开发人员会认识到这是尝试启用和禁用中断而不知道先前中断状态是什么的常见问题。
答案 3 :(得分:1)
也许正在寻找废弃的_
:
void Foo(string parameter)
{
_ = parameter;
}
答案 4 :(得分:0)
这是您可能会使用的黑客攻击:
namespace YourComapany.Tools{
class CS
{
public static void UNREFERENCED_PARAMETER<T>(T t) {if(t == null) {T d=t;}
}
};
...
CS.UNREFERENCED_PARAMETER(whatever);