可能错误的空语句-在这种情况下编译器是错误的
本文关键字:错误 这种情况下 编译器 空语句 | 更新日期: 2023-09-27 17:51:02
我觉得问这个问题很愚蠢,但是我如何指示编译器这不是一个错误?我真的打算在我的if
语句中有一个"空"分支,最后有一个明确的else
捕获坏值。
我当然可以围绕这个重构整个if
,但结果会不太清楚,并且围绕一个愚蠢的编译器警告工作似乎很奇怪。此外,我更希望我不需要禁用整个警告,只是为了这个特定的语句。
#pragma warning disable xxxx
if (condition)
{
// north of the wall, nada, nothing
}
else
{
// code
}
#pragma warning restore xxxx
为什么不在if
条件前面放一个bang,这样就可以完全避免使用else
?
if(!condition){
//just work here
}
编辑:根据问题作者评论(其多个条件)更新答案
if(condition1){
// code here
}
else if(condition2){
// code here
}
else if(!condition3){
//error case here
}
嗯,我知道这是愚蠢的,只是使用一个空块摆脱它:
if(condition1)
// code here
else if(condition2)
// code here
else if(condition3)
{
//nothing to do
}
else
// error case here
如果你把
;
((Action)(() => { }))();
,警告应该消失。
(缺点:这可能需要时间在运行时执行,是一种浪费。如果是这样,它应该只用于跟踪(如果它可以用于跟踪),并且应该在发货前删除或替换。
from: Simple c# Noop Statement为了抑制编译器警告,VS2010有编译器选项和#pragma选项。编译器选项影响整个程序。#pragma选项可以影响整个程序。#pragma选项还可以在本地在目标代码之前关闭特定的警告,然后在目标代码之后再打开警告。#pragma warning disable 0642
将隐藏这个警告。#pragma warning restore 0642
将恢复它。这太丑了。我见过的其他ide允许单行覆盖警告(在挑衅代码之后的注释中的特定文本),但VS2010似乎没有这样做。(我可能错了。有人知道吗?)
唯一的解决办法比你的"问题"更糟糕。本地的#pragma指令会让你的代码变得更丑,但会移除警告。最终,你最好按照聪明人的建议去做。(他们有时会错失良机。)随心所欲并不一定是胜利。你必须承认这种可能性,才能得到关于如何做到这一点的答案,而不管这是否是一种改进。
基本上这个问题是关于PREFERENCE的。你应该从一开始就说出来,通过(用代码)显示你在说什么,而不是通过让他们猜测一遍又一遍来滥用有用的人。
编译器警告你可能不应该这样写:
if (expression)
; // Do nothing, because blah blah blah.
else
{
code that;
does something;
}
,而是选择
中的一个:if (expression)
{
// Do nothing, because blah blah blah.
}
else
{
code that;
does something;
}
或
if (expression)
{ } // Do nothing, because blah blah blah.
else
{
code that;
does something;
}
你没有"特别提到这个"(别人重写了你从未提供的代码)"作为一种可能的解决方案……"此外,您没有说您是否拒绝Riad将;
更改为{ ... }
或其周围的#pragmas(顺便说一下,只有在您不将;
更改为{ ... }
时才有必要)。
这些变化绝不等于"围绕[删除]这个[警告]重构整个if[语句]"。(即if (!expression) { code that; does something; }
)
这些变化绝不比原来的"不清晰"。
我不介意知道一个不难看的重写。我可能想写这样的东西,因为我想省略所有那些愚蠢的围绕在空行上的大括号,这些大括号会使这样的部分的高度增加一倍:
if (condition1)
action1;
else if (condition2)
; // (do nothing)
else if (condition3)
action3;
else if (condition4)
; // (do nothing)
else if (condition5)
action5;
else
action99;
显然,我必须使用一个更难看的选项来避免那些恼人的"可能错误的空语句"警告。