可能有误的空语句 - 在这种情况下编译器是错误的

时间:2015-05-27 19:33:34

标签: c#

我觉得这很傻,但是如何指示编译器这不是一个错误?我真的打算在我的if语句中设置一个“空”分支,最后清除else来捕获错误值。

我当然可以围绕此重构整个if,但结果不那么明确,并且解决一个愚蠢的编译器警告似乎很奇怪。此外,我更愿意,如果我不必禁用整个警告,只是为了这个特定的声明。

5 个答案:

答案 0 :(得分:2)

#pragma warning disable xxxx
if (condition)
{
  // north of the wall, nada, nothing
}
else
{
  // code
}
#pragma warning restore xxxx

答案 1 :(得分:2)

嗯,我知道这是愚蠢的事情,只需使用一个空块就可以摆脱它:

paper-header-panel { 
    height: 100% 
}

答案 2 :(得分:1)

为什么不在您的if条件前放一声,这样您就可以完全避免使用else

if(!condition){
  //just work here
}

编辑:根据问题作者评论(其多个条件)更新答案

if(condition1){
  // code here
}
else if(condition2){
  // code here
}
else if(!condition3){
  //error case here
}

答案 3 :(得分:-1)

为了抑制编译器警告,VS2010具有编译器选项和#pragma选项。编译器选项会影响整个程序。 #pragma选项可以影响整个程序。 #pragma options也可以在目标代码之前在本地关闭特定警告,然后在之后再转回。 #pragma warning disable 0642会隐藏警告。 #pragma warning restore 0642会恢复它。这只是丑陋的。我见过的其他IDE允许单行覆盖警告(在激发代码之后的注释中的特定文本),但VS2010似乎没有这样做。 (我可能错了。有人知道吗?)

唯一的解决办法比你的问题更糟糕"。在删除警告的同时,本地#pragma指令会使您的代码变得更加丑陋。最终,你最好做一些聪明人建议的事情。 (他们有时会错过这条船。)走自己的路并不一定能赢。你不得不承认这种可能性,无论是否是一种改进,都应该得到如何做到的答案。

基本上这个问题是偏好的。你应该从一开始就通过显示(带代码)你所谈论的内容,而不是通过让他们再次猜测和猜测来滥用有用的人。

编译器警告表明您可能不应该写这个:

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(顺便说一下,只有在你不改变{{1}时才需要这样做到;)。

如果[声明]围绕[删除]这个[警告]"那么这些变化就不会重新构成整个#34;重新整理。 (那将是{ ... }。)

不管怎么说,这些变化都不太清楚"比原来的。

我不介意知道一个不丑的覆盖。我可能想要写下面这样的东西,因为我想省略所有那些愚蠢的围绕空行的括号,这会使这样的部分高两倍:

if (!expression) { code that; does something; }

显然我必须使用其中一个丑陋的选项来避免那些令人讨厌的问题"可能错误的空洞陈述"警告。

答案 4 :(得分:-1)

如果您更换

;

((Action)(() => { }))();

,警告应该消失。

(缺点:这可能需要一段时间才能在运行时执行,这是浪费。如果是这样,它应该仅用于跟踪(如果它适用),并且应该在发货之前将其删除或替换。)

来自:Simple C# Noop Statement